1.工程新建,楼主比较懒,习惯用STM32cubeMX生成代码,新建过程中选Nucleo-L496ZG板子的工程,为了减少配置,我直接将不用的MCU管教关闭了, 具体打开的外设有 LPUART1 ,LED_Blue,LED_Red,系统时钟用内部时钟。调试选择 Serial Write。(后续要用JTAG它调试 ): p7 {7 y7 k1 a3 M0 o4 M4 u 2. 配置FreeRTOS,和外设 关于L496ZG串口波特率配置为9600以上,具体原因看帖子 https://www.stmcu.org.cn/document/detail/index/id-218816?lat led和串口的配置我就不放图了,可以参考别人的帖子,+ ~+ K! B C' g& z) | 3. FreeRTOS 简单配置。生成IAR工程5 W h' G; e, X" W9 L 4.在串口文件中 添加printf重定义文件 ,类型就是原子哥的方法! i" X$ Z0 j0 T% o$ X; i 1)* I( m- x8 w0 Q7 R7 A) _2 ^ #if 1 #pragma import(__use_no_semihosting) //标准库需要的支持函数 struct __FILE { int handle; }; FILE __stdout; . ]0 M% I8 U* B //定义_sys_exit()以避免使用半主机模式 6 k7 h5 l3 C* i9 y3 g6 i2 H7 z void _sys_exit(int x) + b9 \! P* C" A7 D3 |; j { 8 @' y6 ]- ^" q" l! p x = x; } //重定义fputc函数 , W- R9 Z8 [. K5 ~ int fputc(int ch, FILE *f)4 Z5 I9 H6 J L, l { while((LPUART1->ISR&0X40)==0);//循环发送,直到发送完毕 7 I: D4 R2 [8 G6 ~' b6 @ LPUART1->TDR=(uint8_t)ch; return ch;/ ] e9 ^1 f8 \) S } #endif 6 F9 K* _2 f- I' H* z, T! P! b % C; O- }# c* S( K9 \+ K! L8 t+ \ 2)( ?' Q h9 M N' z 添加测试代码 led任务 void StartDefaultTask(void const * argument) {6 F7 M! {( n6 a- }. s: b% q for(;;) {0 y" p$ s+ R+ [* A HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);6 N2 p2 A z% }! e osDelay(500); }- f+ q( A+ _: M/ C' e } 6 w8 p6 N z$ }7 p' O9 t printf 代码 /* StartTask03 function */ void StartTask03(void const * argument) {! Y: t5 v0 w% W/ h7 p4 e /* USER CODE BEGIN StartTask03 */ /* Infinite loop */* P6 E/ ^ l0 _& G7 l for(;;)# t3 n/ f. X- [" K8 X {$ I3 N2 g' Y$ _# W printf("基于 Nucleo-L496ZG FreeRTOS 培训测试 \r\n");9 A( r2 Z4 w* I5 c osDelay(1000); } /* USER CODE END StartTask03 */ X+ s2 e" Y) s } 2 F3 T d2 K! X8 T9 a 5 结果如下8 z3 _2 M7 y) z& |+ P& w 1 `) l1 p* J2 B* S5 Z: [# _, D - \/ K v" k5 M, Y! S5 T+ U$ D 6 Y4 f- }4 V/ P, r8 ?' l; | 0 O7 J' ^( c9 u- @( L/ I* R- B 0 M8 ?5 x7 f$ d- Y8 G% ~ 7 ?1 m6 A8 z( ]# l% n, g$ U/ i |
FreeRTOS.rar
2018-4-16 23:57 上传
点击文件名下载附件
13.97 MB, 下载次数: 11
éå
https://www.stmcu.org.cn/module/forum/thread-615497-1-1.html