使用 LAUNCHXL-F280049C通过Modbus协议控制LED灯,软件配置和通信协议实现。
1. 硬件准备
LAUNCHXL-F280049C开发板,供电USB或外部电源。
LED灯,连接到一个GPIO引脚GPIO23和GPIO34。
连接方式,LED正极通过限流电阻680Ω接电源,负极接GPIO。
Modbus通信接口:
连接开发板上的MICRO口与PC端连接进行通信。
2.原理图
LED灯
MICRO接口。
3、SYSCONFIG配置
Modbus使能中断函数配置
小灯GPIO口配置
4、代码
Modbus部分函数
if(opt == Modbus Readout){ // 读 switch((outputIo_e)regAddr) //这里清除所以错误信号的逻辑我还没有理清楚case 100 ClearErr:if(system_error.all ==0) data->bit =0; else data->bit = 1; break; case IOO MODE SWITCH:data->bit = MODE SWITCH;break; case IOO LED4 ENABLE:data->bit =LED4 ENABLE;break; case IOO LED5 ENABLE:data->bit = LED5 ENABLE;break :
在中断里面翻转小灯,实现小灯的亮灭
interrupt void INT SysTick ISR(void) systick 1ms++; if(LED4 ENABLE == 1) GPIO togglePin(LED4); else GPI0 writePin(LED4,1); if(LED5 ENABLE == 1) GPIO togglePin(LED5); else GPI0 writePin(LED5,1);
在中断里面进行MODBUS的定时接收,避免造成较大的延时,使Modbus超时
interrupt void INT MyCPUTIMER2 ISR(void) //这个函数将cputimer2停止了所以需要再次在其他函数中奖这个定时器进行使能CPUTimer stopTimer(CPUTIMER2 BASE);CPUTimer reloadTimerCounter(CPUTIMER2 BASE); //这是在CPU中断中使用定时器调用服务函数 sTask start(&task modbusServiceHandle,0,rcvbuffer, rcvcounter); rcvcounter=0;
5、演示视频