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

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

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

! q$ `) D1 r" @' m. D' w* c
首先同步一下我的开发环境及软件
电脑:Windows 10 64位
STM32CubeMX版本:6.11.1
STM32CubeMX中U0 Pack包版本: 1.0.0
Keil版本:5.37.0.0
Keil中U0 Pack包版本:1.0.0
8 N' ~5 b! n: e( z  r, }
一. 模板工程创建
打开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

6 q5 [4 E, T. d6 ^4 F  _) l; _
二. BSP的使用
BSP的各个函数在stm32u0xx_nucleo.c中,需要调用什么函数可以去这里看
3 G/ C+ a7 ]; a8 n, X
2.1 LED
在文件中LED相关函数后初始化、去初始化、亮灯、灭灯、翻转、获取灯的状态
其中初始化已经由CUBE自动配置调用了,我们直接使用即可,自动生成的LED初始化函数调用如下
12.png
这边以LED的闪烁为例,这里用了on、off函数和Toggle函数两种方式实现了LED的闪烁
  1. #if 06 B0 V  s6 q6 b3 X

  2. ' K' W# W  ^+ \5 q! A* _
  3.     /* LED BSP测试--on、off函数 */
    : F5 v1 Y4 |3 ]! [6 T

  4. 4 \: u* K7 j/ i- B
  5.     BSP_LED_On(LED_GREEN);
    ' U: I' c1 K  {" ?  m8 q8 U

  6. - \% U0 F6 y8 ^/ V1 p. N8 b0 N
  7.     HAL_Delay(1000);
    . y2 l" c+ u& V( \% \$ _
  8. ' E/ x( S. R% `# u
  9.     BSP_LED_Off(LED_GREEN);2 I* b0 p* I$ J, G6 f! W

  10. 7 v( [9 S; \* i! P$ G+ {: r
  11.     HAL_Delay(1000);
    % v7 S% x# e' {
  12. 3 k# i5 M- e8 F- I- S* |
  13. #endif8 M2 H: v1 O5 K0 v1 Z+ f4 ^

  14. 8 X3 S- w& I! K: f+ U$ h
  15. - z3 Q( ^3 q  H( w; r4 T

  16. ' V2 a) |. W0 z# M  Y0 ]( U
  17. #if 1
    ( G7 g8 i5 I- Z& U$ S
  18. : P- a1 a9 H, H. E7 N. D
  19.     /* LED BSP测试--Toggle函数 *// v# a( m" B5 g9 j8 }0 h9 p

  20. 6 D% @1 V7 @6 u8 F2 o
  21.     BSP_LED_Toggle(LED_GREEN);1 [% [: w" g  @0 Y& @3 y

  22. . ^/ c3 O0 p+ y, {2 r! {
  23.     HAL_Delay(2000);( n# ?3 `: w% r* C/ `' p
  24. + e9 G7 s  F2 w- H4 ?) U) @
  25. #endif<span style="font-family: 宋体; font-size: 10.5pt; background-color: rgb(255, 255, 255);"> </span>
复制代码
10.png
% E" D6 e7 |8 @" o9 i% Q9 |
2.2 虚拟串口
自动生成的串口的初始化函数调用如图
13.png
* b5 }4 Y- T: m6 Q% @. S$ N
虚拟串口主要是要做打印输出,一般使用printf,但是当前工程不能直接使用printf,需要做一下printf重定向
& t! T5 _- W( X- a) d  Z$ ~$ Y
  1. int fputc(int ch, FILE *f)
    ( h0 }$ C  s8 y6 S
  2.   M; q% B* c9 f, w: V
  3. {
    ' ^8 Q% q% w- C7 y; H: i

  4. 6 f$ j( [, {. P1 t. X  E
  5.   HAL_UART_Transmit(&hcom_uart[COM1], (uint8_t *)&ch, 1, 0xffff);
    9 ]! T) n2 V1 Y0 `! O; X

  6. , Q. A1 b* r+ P7 j
  7.   return ch;& |+ }* c7 t. ]4 {

  8. % W. k/ \8 e. }+ O' P7 X
  9. }
复制代码
- s$ E1 {- h* l
11.png
Keil中开启一下Micro LIB
14.png
增加一下printf函数,测试一下他能否正常工作
  1. printf("STM32U0 printf test\r\n");
复制代码
15.png
编译烧录,打开串口软件,复位芯片,有打印输出
16.png
8 Z! i1 i& Q9 e
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 v& ~( ~; c! n) K

  2. # y$ u9 K9 x4 f
  3. {
    . o( X0 M" R& T2 c6 J7 \: p* W

  4. 5 W' w8 `4 }: ~3 {0 |/ i" u" V
  5.   if (Button == BUTTON_USER)# s' q4 u6 h/ O, V4 ]
  6. ; J+ y% e% N4 P3 D0 E+ n
  7.   {6 U% x" b. D, z2 E

  8. $ k7 A. V9 c* G) g( x
  9.     UserButtonState = BUTTON_PRESSED;
    0 H  P3 M4 X1 k$ {- \
  10. 1 J% \  g( b# d' h4 X
  11.   }" [! J( K- i: g
  12. ; k' k: j- r: Y4 m8 d6 e! j
  13. }
复制代码
17.png
) j8 t9 q# z0 R* G' M
  1. #if 14 D0 f) R& N& t) ^( \
  2. ' P2 Q. J) @% d, O2 C8 q; K+ S
  3.     /* BUTTON BSP测试 */6 j5 F. e/ e) L- e
  4. : H& \2 e+ B$ p1 I. m3 Y
  5.     if (UserButtonState == BUTTON_PRESSED)
    3 M3 N; H+ P! V) Y) A9 ^
  6. + s, K/ X& Z" W
  7.     {1 x" V" k# D. F& W2 T0 _% a- p6 D9 X
  8. 8 i0 ?2 a) Y% B, s! H
  9.       UserButtonState = BUTTON_RELEASED;
    ) W* ^0 q) m+ ~4 J& O
  10. ! C6 h1 V) G/ ^2 ?
  11.       BSP_LED_Toggle(LED_GREEN);' j: \! c8 {7 K  F
  12. - j- S, g) F4 T9 h+ r- \
  13.     }
    & T1 E& h3 P6 q9 U8 j

  14. 4 A( W6 c1 C$ z* R$ Z2 v) S
  15. #endif
复制代码
2 p4 f) ~$ N0 W
18.png

! Q" \7 k2 v3 ?6 `( D& p
USER按键按下后LED就会进行翻转

- i0 G3 w$ P5 J; I5 u
模板工程(额外增加了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
流程写的很详细,可以按照之前申请的内容再扩展一下
4 |  S6 X4 u) j7 Z

所属标签

相似技术帖

官网相关资源

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