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

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

[复制链接]
小萝卜啦啦啦 发布时间:2024-5-5 20:25
开始正式测评前,需要准备一个基础的模板工程,后续的测评内容都在该工程的基础上修改
" J7 i; Y5 ~0 R7 T$ ]9 a$ Q
首先同步一下我的开发环境及软件
电脑:Windows 10 64
STM32CubeMX版本:6.11.1
STM32CubeMXU0 Pack包版本: 1.0.0
Keil版本:5.37.0.0
KeilU0 Pack包版本:1.0.0
' g9 y% w$ r. u! }0 @( [7 V3 o4 J
一. 模板工程创建
打开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
7 I+ r  Y5 B; e
二. BSP的使用
BSP的各个函数在stm32u0xx_nucleo.c中,需要调用什么函数可以去这里看
+ I2 e# ?7 L" U0 G
2.1 LED
在文件中LED相关函数后初始化、去初始化、亮灯、灭灯、翻转、获取灯的状态
其中初始化已经由CUBE自动配置调用了,我们直接使用即可,自动生成的LED初始化函数调用如下
12.png
这边以LED的闪烁为例,这里用了onoff函数和Toggle函数两种方式实现了LED的闪烁
  1. #if 0
    ( \6 A- L! e8 }) w; M3 u3 L

  2. 6 f% I( ~9 K' K4 A+ K3 X
  3.     /* LED BSP测试--on、off函数 */- Y) m. ^0 W: |5 S$ B, s/ r4 I/ l
  4. 3 u8 F% n5 [) U$ l' g& \
  5.     BSP_LED_On(LED_GREEN);
    % {7 K1 T% U( O2 y0 V' T" f
  6. " x$ V* B& h3 t4 x; R* d
  7.     HAL_Delay(1000);& [4 j* f! G$ o2 C& f# |/ U. {

  8. ' R( V8 N: k  n! @% @6 V
  9.     BSP_LED_Off(LED_GREEN);
    2 y2 D. x+ d5 T% `

  10. 3 H6 T9 G- Y6 [+ {4 k  l
  11.     HAL_Delay(1000);
    6 O% t0 a$ ?. q9 s

  12. 0 X: }* Q) T: r1 g$ J' H/ y8 S
  13. #endif. w$ G' `, h; j0 N" _/ N& i* o
  14. ' A% d: ?* ~  h: R4 U# E
  15. 4 \: [, p5 @# N; l  ^

  16. 1 H  G4 d( H: j/ @+ U
  17. #if 1
    8 V* W0 t% I% F3 a3 b  n

  18. % f$ k, H  D0 c6 f2 s. N
  19.     /* LED BSP测试--Toggle函数 */9 c8 Z" B# g7 Y: g& i* f- l7 B
  20. , F3 O% S8 b1 b3 z
  21.     BSP_LED_Toggle(LED_GREEN);- v4 e3 m  S1 F; q" M' u/ h, S: z

  22. * y& \: A8 J8 S& s; i8 S
  23.     HAL_Delay(2000);
    4 J$ w& v9 v7 z3 V- u+ t: p0 y

  24. ' c; U& ]- \1 A$ Z/ T
  25. #endif<span style="font-family: 宋体; font-size: 10.5pt; background-color: rgb(255, 255, 255);"> </span>
复制代码
10.png

5 o, d. X9 }0 n
2.2 虚拟串口
自动生成的串口的初始化函数调用如图
13.png

+ m+ Q. r, a- M* }! C+ B% \
虚拟串口主要是要做打印输出,一般使用printf,但是当前工程不能直接使用printf,需要做一下printf重定向
' }. F& t  O/ n( {8 {, K
  1. int fputc(int ch, FILE *f)
    ; f& h- X& d8 U9 C

  2. , k1 g; [: p7 m2 f8 U9 R; q/ R& F
  3. {
    . l" z; E3 R. z1 H8 e2 p- ~3 o
  4. 6 z0 \+ u  [1 x/ w+ t6 J; D
  5.   HAL_UART_Transmit(&hcom_uart[COM1], (uint8_t *)&ch, 1, 0xffff);
    / A$ N7 P% W: n; O, h. V
  6. 1 O! K# P' L: q# S3 s/ M' h7 Z2 t
  7.   return ch;
    $ E4 I% V0 B9 I6 ?9 }4 w3 {

  8. ) d& N9 T% I7 a% |$ T
  9. }
复制代码
1 K/ V8 B' [; J4 f7 v" |# \) W) Z
11.png
Keil中开启一下Micro LIB
14.png
增加一下printf函数,测试一下他能否正常工作
  1. printf("STM32U0 printf test\r\n");
复制代码
15.png
编译烧录,打开串口软件,复位芯片,有打印输出
16.png
/ x7 A( D2 u4 [" u8 J
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 ?, Z" g7 L8 |- r9 f1 |6 _

  2. $ z4 X1 `) E" I# W: z; j
  3. {1 r1 L, W/ D: V, |) F/ o& s9 \
  4. ' Q' s) K5 ?8 H3 }
  5.   if (Button == BUTTON_USER)( R* |5 U* q, L/ \( Y) ?* Y; {

  6. - M# v: E* T0 \, h, s
  7.   {" k: f: l# V% x' A+ z$ N2 Z! X% b

  8. . u9 ?/ H6 L7 i/ z6 M+ l4 M
  9.     UserButtonState = BUTTON_PRESSED;/ M, u8 [4 `/ M7 \9 `5 y
  10. $ F  z6 R, f6 i: y7 z+ d
  11.   }( b, U" f3 J7 ~0 W# G
  12. 0 e8 q! w# b+ _, T9 b
  13. }
复制代码
17.png
6 N, T5 D+ E% }# |- a1 t1 |
  1. #if 19 P1 k  s# v+ A  F' u

  2. 1 V; I$ r; j, o" |6 v
  3.     /* BUTTON BSP测试 */
    ! G- j" \1 r1 l0 b4 Y" _! U. {

  4. 5 j5 \( i/ C, M
  5.     if (UserButtonState == BUTTON_PRESSED)
    ' y' s, E& c: Z
  6. : f+ ^+ p6 w# }# z. \
  7.     {& A' w. g- K7 H9 ^9 j
  8. 3 y' h, U8 ^* L$ W  k5 h
  9.       UserButtonState = BUTTON_RELEASED;
    ! o, E1 o' t+ U0 M

  10. ! @6 z+ S% ?* `
  11.       BSP_LED_Toggle(LED_GREEN);. f- W: s) M# N* v6 n5 u0 ^
  12. 9 P5 P2 b7 k/ O$ ~( k3 [: {! M
  13.     }
    # @# k+ F5 T0 B+ s

  14. 1 \1 q- p' J3 D9 S% i  o
  15. #endif
复制代码

4 [8 {: q8 i) o# ?( T
18.png

% O/ ~* U5 u4 J
USER按键按下后LED就会进行翻转
# U6 j9 P1 C% n! d9 h: N7 F8 n# \9 q
模板工程(额外增加了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
流程写的很详细,可以按照之前申请的内容再扩展一下
1 b* ^7 @- R: m& m' }0 t" k* _- R. c4 A" U

所属标签

相似技术帖

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