1.工程新建,楼主比较懒,习惯用STM32cubeMX生成代码,新建过程中选Nucleo-L496ZG板子的工程,为了减少配置,我直接将不用的MCU管教关闭了," }% H" o1 L& I8 _+ K, x2 e 具体打开的外设有 LPUART1 ,LED_Blue,LED_Red,系统时钟用内部时钟。调试选择 Serial Write。(后续要用JTAG它调试 ) {8 l" I! s2 q1 v' X * E+ _/ q" [* x4 w# C- ~# X% I% v7 X' B 2. 配置FreeRTOS,和外设 关于L496ZG串口波特率配置为9600以上,具体原因看帖子 https://www.stmcu.org.cn/document/detail/index/id-218816?lat& F. z1 D6 A1 q, y& d led和串口的配置我就不放图了,可以参考别人的帖子,6 u+ T& l! w* Q' @4 d6 p; q 3. FreeRTOS 简单配置。生成IAR工程) `( S" B% P* c" ~ 4.在串口文件中 添加printf重定义文件 ,类型就是原子哥的方法 1) #if 1 #pragma import(__use_no_semihosting) - i; O$ v1 m/ ^$ b //标准库需要的支持函数 5 t. P/ j; J3 R ]; i% Z struct __FILE { int handle; " |1 }8 y) @) u* U( X }; & Z. Y" J9 K; ?: v FILE __stdout; ; E0 {! a( i- M7 ^1 n2 K: N //定义_sys_exit()以避免使用半主机模式 void _sys_exit(int x) . S; z% Q/ t+ y9 J0 m# t { x = x; 0 \7 @" |- r! H, U( j } //重定义fputc函数 & o9 `1 O( u: S- @6 J) u& u int fputc(int ch, FILE *f)' R. M: {0 O, _* M7 b { 3 f$ U6 Z3 q4 f( f9 S( q' i( E while((LPUART1->ISR&0X40)==0);//循环发送,直到发送完毕 % r5 v$ P5 L( Z) y, _% D: l LPUART1->TDR=(uint8_t)ch; return ch; }+ R7 ?# V, I% L' `: ^: e #endif 2 f3 m0 M* F* q+ n z) d7 _ 2). x/ C, }( O" V% ^3 i% F0 x& q+ @ 添加测试代码 led任务 void StartDefaultTask(void const * argument) { for(;;)3 f1 \- j5 E) o: l2 l { HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);6 \. `% ?; y' C: W" n% z3 X; p osDelay(500); }, h5 U' X0 C7 g9 U4 J, p$ V, `, x }( T! i! {0 l1 X9 H( w0 j printf 代码 /* StartTask03 function */ void StartTask03(void const * argument) { /* USER CODE BEGIN StartTask03 */5 W, d/ l) J" X7 s* O /* Infinite loop */ for(;;)' v- G1 P; A. a {/ a% j. t: B& G& C printf("基于 Nucleo-L496ZG FreeRTOS 培训测试 \r\n"); osDelay(1000);( e7 G8 l. G" Y. ] } /* USER CODE END StartTask03 */ } 5 I) x$ `, ~4 b& Y% r9 V" l8 c) d 5 结果如下) k. X9 d) ]8 i2 `4 x 2 J9 ?& D' c# ^9 C) ` - Q) R7 l( ~+ G9 f% o1 Q ' `/ x* [; H9 R1 K8 I' s$ L3 \ ; q( ^: [; ]1 x. W* P* t 0 ^! o8 p# u# {7 { |
FreeRTOS.rar
2018-4-16 23:57 上传
点击文件名下载附件
13.97 MB, 下载次数: 11
éå
https://www.stmcu.org.cn/module/forum/thread-615497-1-1.html