你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于Nucleo-L496ZG的FreeRTOS信号量和队列

[复制链接]
寂寞,点燃一支烟 发布时间:2018-4-15 11:21
1.工程新建,楼主比较懒,习惯用STM32cubeMX生成代码,新建过程中选Nucleo-L496ZG板子的工程,为了减少配置,我直接将不用的MCU管教关闭了,
" @+ k  @$ D( G. e3 c4 g    具体打开的外设有 LPUART1 ,LED_Blue,LED_Red,系统时钟用内部时钟。调试选择 Serial Write。(后续要用JTAG它调试 )
7 U7 _2 x/ t8 _) h. H/ s( ]0 e0 j$ L
5 _' ?2 l( w3 G5 \- N) Q

- y9 ?+ ~  {  y' V" ?  V5 T  x2. 配置FreeRTOS,和外设 关于L496ZG串口波特率配置为9600以上,具体原因看帖子
9 E7 `  t7 g4 x0 ^, f! N  ~% B    https://www.stmcu.org.cn/document/detail/index/id-218816?lat+ r0 I/ M0 Z$ w3 j4 j
   led和串口的配置我就不放图了,可以参考别人的帖子,
* N2 v. \3 @2 ~: _3.  FreeRTOS 简单配置。生成IAR工程
8 k6 w- x' c: a% R$ P4.在串口文件中  添加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)            
$ T$ C1 f$ T5 b. o2 n//标准库需要的支持函数                 5 z( n" x* g. l: L% q
struct __FILE
! W% F8 I4 l& e8 l' f6 p{ 3 m; P; G% l/ c3 T
        int handle;
  _% T; u" @* V. W: s: ?}; 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)
2 j1 ^! s, h4 P8 m7 ?4 J{
" R6 H6 e  G8 a8 g6 }' m5 u        x = x;
8 x6 M# s1 s  Z, S} ) ^! l. M* `. }& Q, ]
//重定义fputc函数   |+ n& y' C3 N! p  o" y2 z
int fputc(int ch, FILE *f)
, A6 Y: L( ~& n$ a5 @- }{         + r& }0 W0 J: h* Q8 c
        while((LPUART1->ISR&0X40)==0);//循环发送,直到发送完毕   ) ]5 X7 s. b# g6 m- T7 ]
        LPUART1->TDR=(uint8_t)ch;      
7 A  _% X' ?. c6 A  ^9 y  j        return ch;
- v/ T# a0 g0 C1 I, Q+ P}, F- `4 i$ W7 ]' ~5 C- E, k
#endif
% M- J4 s3 Y: D" g: Z# k8 ?/ f! Z( L# t; y* F% `
2)
/ q+ I/ d% y/ i  添加测试代码) D, I4 q. t' }' Y
led任务  
( ]# I, Z$ Q. t; s! e: c2 {void StartDefaultTask(void const * argument)
) v" f" L6 g4 ]& @, L) P# r8 N( ^8 d{
1 r- u5 `+ e* A  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

9 M( P1 t1 }$ S, Z* i9 dprintf 代码
/ w% ]* v' X) I6 y( d1 V/* StartTask03 function */
" g4 A; r! J  b, f6 c# q8 P6 evoid StartTask03(void const * argument)
+ X7 r5 m: o8 E8 b  p{
$ B' K5 t) J6 S; g) m, ^  /* USER CODE BEGIN StartTask03 */
) V2 G2 {7 o! v  /* Infinite loop */5 p, i) u2 @* o5 |* M
  for(;;)
: Z) E# ^( B; k, Z/ {! n7 t( z  {$ t! _; p5 E0 J
    printf("基于 Nucleo-L496ZG FreeRTOS 培训测试  \r\n");
8 l# D; }8 D( {6 J9 n4 @8 a    osDelay(1000);
( g, J. |0 ^3 K) V, p$ i  }0 G" v2 I4 j  h$ V1 V
  /* USER CODE END StartTask03 */$ l2 {5 U( ]7 V+ r' s
}
, W) x. F! K0 l" _& N. w, w, g+ o' K; _. v
5 结果如下7 ]4 _% ?4 n3 S0 E* D- C0 G

* y4 ?- d% L& v7 \
) E4 F& D+ {& n( J6 ]

1 E0 f* s, v; c4 o2 L$ r3 n9 N5 i
1 R# D  K/ ^! Z: n

$ g6 Y" p8 P. H$ s+ J4 {3 |. U& U5 O/ v; y$ b+ Y
, }/ }. N$ V+ M+ N

6 Z, w; o- d" C
2 F8 b# _$ G6 i3 ?
收藏 评论3 发布时间:2018-4-15 11:21

举报

3个回答
寂寞,点燃一支烟 回答时间:2018-4-15 11:23:14
测试功能,队列后续更新
寂寞,点燃一支烟 回答时间:2018-4-16 23:57:38
添加源代码  消息队列 按按键会发送    接收到串口打印出来

FreeRTOS.rar

下载

13.97 MB, 下载次数: 11

队列

zero99 回答时间:2018-4-17 14:52:20
感谢分享,请汇总到4月技术原创
. U' }$ x9 c% C) v( ?' Chttps://www.stmcu.org.cn/module/forum/thread-615497-1-1.html

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版