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

【NUCLEO-U083RC评测】②创建模板工程及BSP的使用

[复制链接]
小萝卜啦啦啦 发布时间:2024-5-5 20:25
开始正式测评前,需要准备一个基础的模板工程,后续的测评内容都在该工程的基础上修改

- r; N6 n, ^, P6 E8 Q$ ?
首先同步一下我的开发环境及软件
电脑:Windows 10 64位
STM32CubeMX版本:6.11.1
STM32CubeMX中U0 Pack包版本: 1.0.0
Keil版本:5.37.0.0
Keil中U0 Pack包版本:1.0.0
9 K% R" w; |8 v+ F, i
一. 模板工程创建
打开CUBEMX,选择从开发板开始创建工程
1.png
通过左侧的筛选条件,找到U0开发板
2.png
弹出的人际接口默认是把LED、按键、虚拟串口都选上了,这些都保持默认即可(如果后续不要可以在CUBE中关掉)
3.png
可以看到LED、按键、串口都被配置好了,都不需要用户再来手动配置
4.png
来到Project Manager中设置工程名字和选择IDE,生成工程
5.png
生成完毕后,会弹出如图提示框,我们选择直接打开工程,就会直接自动打开keil
6.png
全编译,没有错误没有警告
7.png
下载选项中把烧录后自动运行勾上
9.png
下载也没问题,那么模板工程就创建好了(但是还不能直接使用,主要是串口还不能马上使用,还需要稍微修改一下,详见下面的BSP使用)
8.png

4 h2 b' p* x; ]+ Y
二. BSP的使用
BSP的各个函数在stm32u0xx_nucleo.c中,需要调用什么函数可以去这里看

6 A- B; E' ?5 R; T: N5 W
2.1 LED
在文件中LED相关函数后初始化、去初始化、亮灯、灭灯、翻转、获取灯的状态
其中初始化已经由CUBE自动配置调用了,我们直接使用即可,自动生成的LED初始化函数调用如下
12.png
这边以LED的闪烁为例,这里用了on、off函数和Toggle函数两种方式实现了LED的闪烁
  1. #if 02 B9 `* J  R4 s2 i; i6 \1 a

  2. 9 h3 f. D: H9 R8 W8 j7 k
  3.     /* LED BSP测试--on、off函数 */5 h4 I* {) E* q& C5 N9 ~; |: J. H
  4. : V( w7 X# _# b$ q' U+ A
  5.     BSP_LED_On(LED_GREEN);" ]- X$ w/ U- L. G& E; L

  6. . m: ?# f/ U: b, Q  h, A/ Y% E
  7.     HAL_Delay(1000);
    . E$ S6 }, Q' a7 U& W
  8. % C& `9 Y; O! C" Q, }! t! L
  9.     BSP_LED_Off(LED_GREEN);
    " ?3 s9 w( S4 K" A% W8 a

  10. : k7 J: D$ D/ \! {7 f0 h9 a
  11.     HAL_Delay(1000);
    7 ?2 c* \8 a& |- S
  12. + [6 A, S1 V+ d
  13. #endif+ _, X( }2 u/ X/ v* Q

  14. * G. k) C6 n* G0 \& f+ `8 J
  15. 8 a* `& z$ c5 }/ _, d- v
  16. # E; H8 g, H; z0 \
  17. #if 1
    ' C  q( n+ q" O1 V: K9 Q% D

  18.   e2 n' \0 u' x( \
  19.     /* LED BSP测试--Toggle函数 */5 b( e2 {+ q$ [  s, j
  20. * e! V0 A0 y; p- e
  21.     BSP_LED_Toggle(LED_GREEN);- h9 l5 e! f  Z/ v) Y+ U& ~

  22. ' d' I) c0 r, R, T+ ^) Z7 a) m
  23.     HAL_Delay(2000);9 O: E2 w6 a8 [* ^1 w; F

  24. 3 d' L! x# D1 ~. J  o9 e& p0 l
  25. #endif<span style="font-family: 宋体; font-size: 10.5pt; background-color: rgb(255, 255, 255);"> </span>
复制代码
10.png

3 D6 P9 J3 c% m! ^
2.2 虚拟串口
自动生成的串口的初始化函数调用如图
13.png

1 E7 g; _7 ?$ e1 g& M% ]& G& k6 k
虚拟串口主要是要做打印输出,一般使用printf,但是当前工程不能直接使用printf,需要做一下printf重定向

# t# d' }; [* m) z! _) p. m7 G; J
  1. int fputc(int ch, FILE *f)
    & O# u$ X0 A& y5 s, N0 w; o/ g+ M2 ]

  2.   Q# V! j# G8 a: x5 E  ^/ h
  3. {
    3 J' N7 p1 m$ D8 a) g

  4. , r* }1 |0 y' \7 J4 }' t1 H1 N) \
  5.   HAL_UART_Transmit(&hcom_uart[COM1], (uint8_t *)&ch, 1, 0xffff);5 s* i, _5 g; P* C
  6. # n% k5 ^8 W$ v2 p! A* ~
  7.   return ch;0 {2 V8 R% Z! @7 t5 M  J1 d

  8. ! B. y4 \; B1 o, x% C0 W, t( C
  9. }
复制代码

" c% `" F# [9 Y& g. D: w2 k+ B( O
11.png
Keil中开启一下Micro LIB
14.png
增加一下printf函数,测试一下他能否正常工作
  1. printf("STM32U0 printf test\r\n");
复制代码
15.png
编译烧录,打开串口软件,复位芯片,有打印输出
16.png

- B# R4 B( |+ I' o0 `; ]
2.3按键
BSP默认是把按键做成了中断触发,stm32u0xx_nucleo.c中有一个叫BSP_PB_Callback的虚函数,当按键按下后就会调用这个函数,用户就只需要关注实现BSP_PB_Callback,在这里面处理按键按下后的业务
  1. __IO uint32_t UserButtonState = BUTTON_RELEASED;
复制代码
  1. void BSP_PB_Callback(Button_TypeDef Button)0 e2 |: o0 N, v$ O; I/ X
  2. 3 b& V! N! K$ m6 }/ n, ^
  3. {- x, |& z$ Q% y) e" F. ^

  4. 1 [4 M0 W0 Y' z/ X. t
  5.   if (Button == BUTTON_USER)
    0 m$ Q  A- e: F* P9 z0 \
  6. 2 h9 v: H: d6 \& |* Q# u
  7.   {  Q/ L/ B5 z9 y# ?" `& x
  8. - h6 d$ d. \# N* p1 n5 m
  9.     UserButtonState = BUTTON_PRESSED;
    5 B; D1 h) a  g/ {2 W

  10.   o4 c8 U) c& p4 j. g5 l; c/ [
  11.   }* S0 ?7 j$ t* ^- z5 G: v, x  h

  12. 2 V4 ]" A3 U8 J  l6 m6 g0 O, M
  13. }
复制代码
17.png

# W/ m4 n, N; K* F
  1. #if 1+ N3 C; y& g/ n3 I

  2. " E6 D3 q& z' E$ _) s- G
  3.     /* BUTTON BSP测试 */
    7 O! f7 c6 w- o- P5 t) M% P/ `

  4. , O3 r  c; c% H6 S# K$ Q9 p# V
  5.     if (UserButtonState == BUTTON_PRESSED)
    . _9 h. ?- y- e( q# D3 Z

  6. / J. |9 c  q6 ]# m6 n
  7.     {
    4 l# U, S$ s1 G. m: V

  8. 5 |. Z7 D2 \3 G9 G1 F& u( n1 _; I
  9.       UserButtonState = BUTTON_RELEASED;
    7 A* C# b' `" P  O0 z( n1 n( e

  10. % c/ B7 v9 W/ j' V& I6 ?! {2 @
  11.       BSP_LED_Toggle(LED_GREEN);" l1 Z- A( p6 X7 M

  12. . @( `2 x) I  ]+ h7 G$ x
  13.     }' s+ ?8 |3 [2 Q# Z. ^

  14. % T2 i& a( I* w' \+ h
  15. #endif
复制代码
) T: L5 I0 T& n' [. U* k' q; q9 l
18.png
5 @  r. m: s6 Q, P# W* ^& g$ s; }
USER按键按下后LED就会进行翻转

; z: u2 m/ z( C: E1 L
模板工程(额外增加了define,替换了上文中#if后面的1):
STM32U0_template_project.rar (5.15 MB, 下载次数: 2)
赞 1 收藏 评论1 发布时间:2024-5-5 20:25

举报

1个回答
STMCU-管管 回答时间:2024-5-9 14:05:03
流程写的很详细,可以按照之前申请的内容再扩展一下8 C% ]4 A% q3 k$ Y

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版