
1.工程新建,楼主比较懒,习惯用STM32cubeMX生成代码,新建过程中选Nucleo-L496ZG板子的工程,为了减少配置,我直接将不用的MCU管教关闭了, 具体打开的外设有 LPUART1 ,LED_Blue,LED_Red,系统时钟用内部时钟。调试选择 Serial Write。(后续要用JTAG它调试 ) . H/ s( ]0 e0 j$ L 5 _' ?2 l( w3 G5 \- N) Q 2. 配置FreeRTOS,和外设 关于L496ZG串口波特率配置为9600以上,具体原因看帖子 https://www.stmcu.org.cn/document/detail/index/id-218816?lat+ r0 I/ M0 Z$ w3 j4 j led和串口的配置我就不放图了,可以参考别人的帖子, 3. 4.在串口文件中 添加printf重定义文件 ,类型就是原子哥的方法( v+ `: i! }# ~4 r; D 1)6 W$ E) |5 e) U #if 1 p5 l- y& G8 j+ x/ z! N S #pragma import(__use_no_semihosting) //标准库需要的支持函数 5 z( n" x* g. l: L% q struct __FILE { 3 m; P; G% l/ c3 T int handle; }; 0 Y/ H7 i, M4 `+ P- @ FILE __stdout; " @7 d$ Q! x, a. [: J) Q //定义_sys_exit()以避免使用半主机模式 , ?4 T2 ]1 S4 W) e6 ^" y void _sys_exit(int x) { x = x; } ) ^! l. M* `. }& Q, ] //重定义fputc函数 |+ n& y' C3 N! p o" y2 z int fputc(int ch, FILE *f) { + r& }0 W0 J: h* Q8 c while((LPUART1->ISR&0X40)==0);//循环发送,直到发送完毕 ) ]5 X7 s. b# g6 m- T7 ] LPUART1->TDR=(uint8_t)ch; return ch; }, F- `4 i$ W7 ]' ~5 C- E, k #endif ! Z( L# t; y* F% ` 2) 添加测试代码) D, I4 q. t' }' Y led任务 void StartDefaultTask(void const * argument) { for(;;)6 D5 T& \# M# D! P& l {; o q3 R+ ]( r3 @ HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);% c. l- ^! T5 B osDelay(500);) ^9 U$ `! L& j: } }4 n1 O/ \1 a" g8 b6 t$ V0 F5 z3 o }; ^9 t' z3 }8 p4 w printf 代码 /* StartTask03 function */ void StartTask03(void const * argument) { /* USER CODE BEGIN StartTask03 */ /* Infinite loop */5 p, i) u2 @* o5 |* M for(;;) {$ t! _; p5 E0 J printf("基于 Nucleo-L496ZG FreeRTOS 培训测试 \r\n"); osDelay(1000); }0 G" v2 I4 j h$ V1 V /* USER CODE END StartTask03 */$ l2 {5 U( ]7 V+ r' s } . w, w, g+ o' K; _. v 5 结果如下7 ]4 _% ?4 n3 S0 E* D- C0 G ) E4 F& D+ {& n( J6 ] 2 L$ r3 n9 N5 i 1 R# D K/ ^! Z: n 3 |. U& U5 O/ v; y$ b+ Y , }/ }. N$ V+ M+ N ![]() |
FreeRTOS.rar
2018-4-16 23:57 上传
点击文件名下载附件
13.97 MB, 下载次数: 11
éå
https://www.stmcu.org.cn/module/forum/thread-615497-1-1.html