
1.工程新建,楼主比较懒,习惯用STM32cubeMX生成代码,新建过程中选Nucleo-L496ZG板子的工程,为了减少配置,我直接将不用的MCU管教关闭了,# \' _0 ]3 j |* x3 F% e 具体打开的外设有 LPUART1 ,LED_Blue,LED_Red,系统时钟用内部时钟。调试选择 Serial Write。(后续要用JTAG它调试 )8 A! G2 J! N# N% i 3 {( z% Q- n/ T + Y& r6 y* h7 t/ V& J / _" b, v! z( m8 l$ v. i) b 2. 配置FreeRTOS,和外设 关于L496ZG串口波特率配置为9600以上,具体原因看帖子 https://www.stmcu.org.cn/document/detail/index/id-218816?lat3 p6 ?% A/ x+ |# U0 @ B led和串口的配置我就不放图了,可以参考别人的帖子, 3. 4.在串口文件中 添加printf重定义文件 ,类型就是原子哥的方法( H# x9 |/ ?* g# @ 1)# P7 y7 V' `& O l+ H0 R( M j# J4 ~ #if 1 #pragma import(__use_no_semihosting) //标准库需要的支持函数 struct __FILE 3 I- J# X) {- {3 j- }; Z3 ~ { int handle; }; 2 Y; c0 v" Z6 G. O4 k. z5 g% S FILE __stdout; 8 [+ d9 V- d! k% u0 ?& ? x //定义_sys_exit()以避免使用半主机模式 void _sys_exit(int x) 0 s& i A& G* s6 W& _6 n' Y! |) O { x = x; # F0 t0 H' k9 o! l } //重定义fputc函数 ! I2 K9 O* Y8 t; V4 F' Z+ x int fputc(int ch, FILE *f)* a3 C2 g; y( N$ ~& A7 L$ C7 u { 2 j. |, L$ T: U2 q' b. V: ^2 [' y0 P while((LPUART1->ISR&0X40)==0);//循环发送,直到发送完毕 N( d5 u( G$ p" V! l; T& \ LPUART1->TDR=(uint8_t)ch; ; w9 r3 o: o9 b C$ K/ S return ch; }" o) M5 A/ y |2 E; s #endif 2) 添加测试代码: v2 m3 v" d r( S8 K5 N5 ]2 K led任务 0 m% {2 [3 g+ F void StartDefaultTask(void const * argument) { for(;;) { HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin); r* N) p6 d& ^; S, H [) H osDelay(500); }, G0 a6 ?- Z$ w$ u% j- b9 W6 a } printf 代码" L, @0 O, N0 x+ m$ t /* StartTask03 function */! C7 ^- I- X7 ~! R1 } void StartTask03(void const * argument)) w( J6 O- D5 v% c {* G+ W/ i- J3 _6 w8 } /* USER CODE BEGIN StartTask03 */ /* Infinite loop */ for(;;): G& H% h6 N' v* i% F, |5 Q {% X9 u9 R% C. X' g: p printf("基于 Nucleo-L496ZG FreeRTOS 培训测试 \r\n");& b8 G; e' s9 u5 U0 x1 O8 \ osDelay(1000); } /* USER CODE END StartTask03 */ b* i' H, @# [- H8 I: y! u; i } 5 结果如下 2 T8 L @4 l! b3 ^ 8 _. j. ]+ Q: d; E4 D1 L4 P c# j+ E. j1 f n C: O " [+ z8 |, ^! A6 `% e ![]() / z% Y- d: \# [7 b. o! z |
FreeRTOS.rar
2018-4-16 23:57 上传
点击文件名下载附件
13.97 MB, 下载次数: 11
éå
https://www.stmcu.org.cn/module/forum/thread-615497-1-1.html