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

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

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

- R0 n6 j4 E4 O: {8 P
首先同步一下我的开发环境及软件
电脑:Windows 10 64
STM32CubeMX版本:6.11.1
STM32CubeMXU0 Pack包版本: 1.0.0
Keil版本:5.37.0.0
KeilU0 Pack包版本:1.0.0

. Y% C6 o9 [* m" k; @& I$ v# N
一. 模板工程创建
打开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
3 d& W( P4 ]- |- q. f; k
二. BSP的使用
BSP的各个函数在stm32u0xx_nucleo.c中,需要调用什么函数可以去这里看

; [) I9 w6 Y% l" z1 r, S: L, h
2.1 LED
在文件中LED相关函数后初始化、去初始化、亮灯、灭灯、翻转、获取灯的状态
其中初始化已经由CUBE自动配置调用了,我们直接使用即可,自动生成的LED初始化函数调用如下
12.png
这边以LED的闪烁为例,这里用了onoff函数和Toggle函数两种方式实现了LED的闪烁
  1. #if 0
    : A: k5 ]) A9 n
  2. 2 |5 t8 j! i% Y( G& p0 `
  3.     /* LED BSP测试--on、off函数 */
    , [; ~: z  X6 X" M# s

  4. 0 M0 Q$ \2 ?5 Z. }) }: I
  5.     BSP_LED_On(LED_GREEN);3 G! ]( b8 T8 z6 K

  6. * t" R. k! W+ h& Z4 O& w0 d
  7.     HAL_Delay(1000);1 O8 L0 D9 ^3 M3 x' \5 `

  8. + p7 E' D- ~9 j/ Q0 s" T
  9.     BSP_LED_Off(LED_GREEN);
    ; C. E9 y  ~: R% u) U  z
  10. & L8 r% H0 X7 ]& _" g# I  u
  11.     HAL_Delay(1000);9 ^8 n: g$ q+ {  a  b$ ?
  12. " l, R; t* t4 u3 `; z
  13. #endif
    % h" |- f% z4 q2 a8 r- n
  14. / t' B4 B1 ]3 ]& c& E& p, Y% F+ ^

  15. " H4 `' ^  ^" d0 U+ I4 D
  16. 0 N8 _1 ]" y1 f; X  y
  17. #if 1
      m0 t, ~, f, T4 F: A5 H1 j: ]4 _" H

  18. ' o: e1 c* V* l$ k: Z
  19.     /* LED BSP测试--Toggle函数 */5 s, ~% h! r, Y$ b% m

  20. 9 R# R3 X' j/ K
  21.     BSP_LED_Toggle(LED_GREEN);
    ) r# a5 s. ?/ ]/ Y/ o5 Z9 G' F
  22. 8 l5 v9 ?2 H1 U) a
  23.     HAL_Delay(2000);* [* y* R. A3 i8 r' a
  24. $ w/ C. s0 |* M# z7 K9 G
  25. #endif<span style="font-family: 宋体; font-size: 10.5pt; background-color: rgb(255, 255, 255);"> </span>
复制代码
10.png
. c% D% P( j7 M- l
2.2 虚拟串口
自动生成的串口的初始化函数调用如图
13.png
2 S- d6 }$ `0 z$ p
虚拟串口主要是要做打印输出,一般使用printf,但是当前工程不能直接使用printf,需要做一下printf重定向

7 a6 A7 \# \* c3 ]5 t
  1. int fputc(int ch, FILE *f)  `* J9 |7 {. m% s2 ?
  2. $ ]" s8 v& G9 M. y1 r
  3. {
    3 Z/ h/ K# M$ I8 q" c

  4. , @+ N) C$ Q3 B
  5.   HAL_UART_Transmit(&hcom_uart[COM1], (uint8_t *)&ch, 1, 0xffff);& t( }3 d! P4 x" |. Z

  6. ) d* \: e& g7 l
  7.   return ch;- V4 z+ x) G( z4 q5 a5 v) E: g

  8. , s7 y! U. P: o' N+ j0 F9 v
  9. }
复制代码
; X" S$ q4 s+ f, d* p: l
11.png
Keil中开启一下Micro LIB
14.png
增加一下printf函数,测试一下他能否正常工作
  1. printf("STM32U0 printf test\r\n");
复制代码
15.png
编译烧录,打开串口软件,复位芯片,有打印输出
16.png
- q& N8 c/ {) P! X
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)
    % d; J# V; m$ k6 u# X- ]
  2. % f! ^. X8 }6 S% n! u3 k
  3. {  n, L* L2 G6 |- j, j5 D. M" `

  4. # z9 v2 o+ L3 t# X# x# C; l6 b0 U# w
  5.   if (Button == BUTTON_USER)
    ; n6 S/ B# C, m6 t3 P
  6. 6 L& \/ c5 s1 M8 C8 y9 K6 _1 j+ F
  7.   {
    1 P% n# `2 y7 {6 N

  8.   z% v. n1 U2 K
  9.     UserButtonState = BUTTON_PRESSED;
    ' F+ q9 N& [1 e2 k& P
  10. / U7 U& G; G& {1 Z1 W
  11.   }
    1 O% w5 @0 v. ]4 _/ q4 d$ N: K
  12. ' |1 K3 Q4 k: k) ]
  13. }
复制代码
17.png

8 M% m  p* o( d
  1. #if 1" A$ ~1 d" R! s) O6 Y( D' I) C

  2. 6 }9 y( i; g$ S$ G) U0 G0 S; I0 Y
  3.     /* BUTTON BSP测试 */
    # V! Q* q  z4 |6 }3 R
  4. : c: q1 m& |# ~: f
  5.     if (UserButtonState == BUTTON_PRESSED)7 x' X# T- ]* F, ~1 R7 `# P
  6. : `# m+ _  I1 ~0 f
  7.     {# N2 A5 p$ n9 x: W* v. |0 j! e! M

  8. ' u2 h$ j) W( G; t( R  Q
  9.       UserButtonState = BUTTON_RELEASED;/ o% I# G* X6 p+ F) A
  10. : R  B( J' N0 T$ k- [. p
  11.       BSP_LED_Toggle(LED_GREEN);
    7 k* Y# v9 P* N
  12. 6 D- }. i" k- ~" U) n" d
  13.     }, a; Z- H7 g/ D$ H

  14. 4 N+ h$ b. N) q- f3 f
  15. #endif
复制代码
% X$ z% z* O& d2 {' N5 a$ Q
18.png

% j, b3 ]+ l/ A4 u5 ^( b8 q
USER按键按下后LED就会进行翻转

+ J0 i7 g9 w- T! Z9 `  x
模板工程(额外增加了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
流程写的很详细,可以按照之前申请的内容再扩展一下
' g: P! n* f/ l* H+ t
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版