1.工程新建,楼主比较懒,习惯用STM32cubeMX生成代码,新建过程中选Nucleo-L496ZG板子的工程,为了减少配置,我直接将不用的MCU管教关闭了, 具体打开的外设有 LPUART1 ,LED_Blue,LED_Red,系统时钟用内部时钟。调试选择 Serial Write。(后续要用JTAG它调试 ) ( L. d0 v ~2 G3 \6 S* X5 o) L 2. 配置FreeRTOS,和外设 关于L496ZG串口波特率配置为9600以上,具体原因看帖子* y+ A/ h3 C/ w https://www.stmcu.org.cn/document/detail/index/id-218816?lat led和串口的配置我就不放图了,可以参考别人的帖子,0 r% k' h- a9 v/ ~ 3. FreeRTOS 简单配置。生成IAR工程 4.在串口文件中 添加printf重定义文件 ,类型就是原子哥的方法7 m4 x# a0 M2 P; j( c 1) #if 13 b# a/ i& U% ? M$ n# V9 s #pragma import(__use_no_semihosting) & n# g6 P5 n7 d' w$ S //标准库需要的支持函数 struct __FILE { int handle; 8 f' q! g4 i) A% R; \ }; FILE __stdout; & ]9 j2 E' Z3 s! B //定义_sys_exit()以避免使用半主机模式 void _sys_exit(int x) { 8 O5 t' [0 I, s/ N% \3 r& p" g x = x; 1 A3 D! _' v: U" K, m! H* H5 ? } 7 d! y5 \4 \ O //重定义fputc函数 int fputc(int ch, FILE *f) { while((LPUART1->ISR&0X40)==0);//循环发送,直到发送完毕 1 ~& h& S7 z% z4 k LPUART1->TDR=(uint8_t)ch; return ch;3 a! @! f, x n8 E- { F } #endif 3 N2 B3 b, u, g. T0 I: J; R 1 u( A) Q1 G; t. s" n* N 2) 添加测试代码 led任务 void StartDefaultTask(void const * argument) {5 b# d+ @* {% W& ~ ]* x0 w for(;;) { HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);+ l% W; d6 ]# q; ^9 w$ j* F, f; q osDelay(500);5 }2 o$ O; O3 e# e } } ! g- e- |( d" r7 [, D4 K3 e8 R. e printf 代码 /* StartTask03 function */) R( O$ f( V( ~! } void StartTask03(void const * argument) { /* USER CODE BEGIN StartTask03 */9 L S# c* o! @1 y /* Infinite loop */4 A1 ~) P& Q! f5 s: t4 n6 j for(;;)9 z% W0 g$ @' f- K/ Q n% p { printf("基于 Nucleo-L496ZG FreeRTOS 培训测试 \r\n");. g9 C; u% x3 x4 J$ j6 H osDelay(1000);+ ~8 ?) y/ B- y- u( C7 T+ ] } /* USER CODE END StartTask03 */ }# n j+ b1 u9 z8 e 5 结果如下 3 S) y- Y/ J* ` , Y7 t3 y6 X! N: z1 O* A 1 S l2 |2 j# w: m& R5 M$ e 9 {, n A; P* ^$ ^ i N6 G* Q% p2 T5 w! I. l; x 3 w" \, t, w$ B6 l2 z, {5 u8 H . B* w7 S7 y" q/ u: Z+ r n& D |
FreeRTOS.rar
2018-4-16 23:57 上传
点击文件名下载附件
13.97 MB, 下载次数: 11
éå
https://www.stmcu.org.cn/module/forum/thread-615497-1-1.html