【GE32E231_DIY】FreeRTOS+DAP_RTT+多功能按键+USART_DMA再加入FREEMODBUS
<p>FreeRTOS+DAP_RTT+多功能按键+USART_DMA再加入FREEMODBUS</p><p>到这里,项目一步一步实现了,一步一步调试真不容易。感谢家人的支持,成有时间码代码。</p>
<p></p>
<p>freemodbus主要思想是用状态机实现,发送—中断。接收—中断,硬时间确认,加一轮询</p>
<p>int main(void)<br />
{<br />
systick_config();<br />
// button_enable(); <br />
// CreateSoftwareTime();<br />
LED_Init();<br />
eMBInit(MB_RTU, 0x01, 1, 115200, MB_PAR_NONE);//初始化Freemodbus数据,定时器,串口(包括中断),工作装态<br />
eMBEnable(); //启动接收中断,等待串口数据到来<br />
/* Create tasks. */<br />
prvCreateTasks();<br />
NVIC_SetPriority_Init();<br />
NVIC_EnableIRQ_Init();<br />
// TIMER2_Config();<br />
/* Start scheduler. */<br />
vTaskStartScheduler();<br />
/* Will not get here if the scheduler starts successfully. If you do end up<br />
here then there wasn't enough heap memory available to start either the idle<br />
task or the timer/daemon task. https://www.freertos.org/a00111.html */<br />
for( ; ; )<br />
{<br />
}</p>
<p>}</p>
<p> </p>
<p>创建一个轮询任务。ModbusSlavePoll<br />
static void prvCreateTasks( void )<br />
{<br />
xTaskCreate(vLED1Task, //* 任务函数 <br />
"vLED1Task", //* 任务名 <br />
configMINIMAL_STACK_SIZE, //* 任务栈大小,单位word,也就是4字节 <br />
NULL, //* 任务参数 <br />
configMAX_PRIORITIES - 3, //* 任务优先级<br />
&xHandleLED1Task); //* 任务句柄 <br />
xTaskCreate(vLED2Task, //* 任务函数 <br />
"vLED2Task", //* 任务名 <br />
configMINIMAL_STACK_SIZE, // 任务栈大小,单位word,也就是4字节 <br />
NULL, //* 任务参数 <br />
configMAX_PRIORITIES - 3, // 任务优先级<br />
&xHandleLED2Task); //* 任务句柄 <br />
xTaskCreate(vLED3Task, //* 任务函数 <br />
"vLED3Task", //* 任务名 <br />
configMINIMAL_STACK_SIZE, // 任务栈大小,单位word,也就是4字节 <br />
NULL, //* 任务参数 <br />
configMAX_PRIORITIES - 3, // 任务优先级<br />
&xHandleLED3Task); //* 任务句柄 <br />
xTaskCreate(vLED4Task, //* 任务函数 <br />
"vLED4Task", //* 任务名 <br />
configMINIMAL_STACK_SIZE, // 任务栈大小,单位word,也就是4字节 <br />
NULL, //* 任务参数 <br />
configMAX_PRIORITIES - 3, // 任务优先级<br />
&xHandleLED4Task); //* 任务句柄 <br />
/* xTaskCreate(RTT_PrintfTask,//std_PrintfTask // 任务函数 <br />
"vprintfTask", // 任务名 <br />
configMINIMAL_STACK_SIZE+50, // 任务栈大小,单位word,也就是4字节 <br />
NULL, // 任务参数 <br />
configMAX_PRIORITIES - 3, // 任务优先级<br />
&xHandleprintfTask); // 任务句柄 <br />
*/ <br />
xTaskCreate(ModbusSlavePoll, //* 任务函数 <br />
"ModbusSlavePoll", //* 任务名 <br />
configMINIMAL_STACK_SIZE+300, //* 任务栈大小,单位word,也就是4字节 <br />
NULL, //* 任务参数 <br />
configMAX_PRIORITIES - 3, //* 任务优先级<br />
&xHandleModbusSlavePoll); //* 任务句柄 <br />
}</p>
<p> </p>
<p></p>
<p> </p>
<p>欢迎大家跟帖交流</p>
<p>谢谢分享!</p>
<p>下载学习,谢谢分享!</p>
<p>非常感谢楼主的提供,E231应该和E230没什么区别吧?放到230应该可以直接运行~~我猜</p>
页:
[1]