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

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

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

* ?* [9 a3 T" t3 M
首先同步一下我的开发环境及软件
电脑:Windows 10 64
STM32CubeMX版本:6.11.1
STM32CubeMXU0 Pack包版本: 1.0.0
Keil版本:5.37.0.0
KeilU0 Pack包版本:1.0.0
) M0 G0 h% p  G+ C0 a6 N5 Q
一. 模板工程创建
打开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

  r- I! _" v8 |" l- u/ r( }8 s' T
二. BSP的使用
BSP的各个函数在stm32u0xx_nucleo.c中,需要调用什么函数可以去这里看

& ?( S& g% l% `
2.1 LED
在文件中LED相关函数后初始化、去初始化、亮灯、灭灯、翻转、获取灯的状态
其中初始化已经由CUBE自动配置调用了,我们直接使用即可,自动生成的LED初始化函数调用如下
12.png
这边以LED的闪烁为例,这里用了onoff函数和Toggle函数两种方式实现了LED的闪烁
  1. #if 02 o3 }* D8 @, C" W
  2. 2 X# F* H* N$ e3 d* I6 ]7 c
  3.     /* LED BSP测试--on、off函数 */( B+ o+ W0 q/ {/ H

  4. 2 v) z- c' }" v7 Q$ @0 {
  5.     BSP_LED_On(LED_GREEN);
    8 u6 X3 d! v5 o5 e
  6.   M, o4 h4 u( |* {
  7.     HAL_Delay(1000);0 f! s: X. D0 a0 v! g4 V5 L- }

  8. 2 {, Z- i/ g" \, A
  9.     BSP_LED_Off(LED_GREEN);' o3 k6 x/ h  D0 [+ I
  10. 9 m' ?3 y% b/ Y) D6 M
  11.     HAL_Delay(1000);
    9 _, [: v% b9 n( S
  12. 9 D5 X) G1 n1 ~3 @* d
  13. #endif
    + d2 R/ N6 y& W
  14.   S( G5 n) n1 c/ _! M/ p
  15. 2 Z- g0 K7 U$ K7 Q% t! M- ?% Y, Q' k9 q

  16. ( O3 C0 D" O* a
  17. #if 1
    ' F$ u1 ]( W' P* m) P6 W7 E2 K( L

  18. ; R% K! Y: {% e1 v$ h! I% b7 L
  19.     /* LED BSP测试--Toggle函数 */
    . K1 J5 T- S1 h2 Z& t& A+ {* G

  20. 7 T  L0 k7 M" f# X9 \0 k) t" ^* v
  21.     BSP_LED_Toggle(LED_GREEN);
    6 C; ?; m1 a' A6 q

  22. " Z- w4 I; e7 X
  23.     HAL_Delay(2000);
    : T* ]3 U$ ~0 i' ?* b2 ?* u
  24. 6 e8 W7 C; T+ x0 n% D7 W
  25. #endif<span style="font-family: 宋体; font-size: 10.5pt; background-color: rgb(255, 255, 255);"> </span>
复制代码
10.png
7 o3 t" q$ S. I& s
2.2 虚拟串口
自动生成的串口的初始化函数调用如图
13.png

& k% g1 N' U/ `( H, U' Z3 p; U/ h: o
虚拟串口主要是要做打印输出,一般使用printf,但是当前工程不能直接使用printf,需要做一下printf重定向
6 H& A4 ?' h2 D' V
  1. int fputc(int ch, FILE *f)
    + R' R0 D$ Q( ?$ h, T" b1 J
  2. * U% }" G5 I7 j$ k+ M
  3. {# {) Y; B9 l; g" J- R
  4. + V, ^, L! V5 O! q
  5.   HAL_UART_Transmit(&hcom_uart[COM1], (uint8_t *)&ch, 1, 0xffff);* F- A# s# q- d

  6. 8 H/ v' x5 y$ R  y& X( e9 X
  7.   return ch;
    / ]8 b' Q$ @9 c! ?

  8. / b4 w- J2 \/ C! c
  9. }
复制代码

0 [2 w5 W9 I3 e5 K3 E& i4 Q
11.png
Keil中开启一下Micro LIB
14.png
增加一下printf函数,测试一下他能否正常工作
  1. printf("STM32U0 printf test\r\n");
复制代码
15.png
编译烧录,打开串口软件,复位芯片,有打印输出
16.png
# o4 h' S! {# T0 g# X( s8 {, \
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)
    ( v& ~- a- M1 z6 p

  2. - Y' }) t- W: ?6 c' o) u
  3. {# |6 `: l9 z1 v: S% l: _# V2 b
  4. & }( g2 d7 o3 Y* D6 c
  5.   if (Button == BUTTON_USER)
    1 [8 y0 X# `. [* s, r  [

  6. 8 X3 B- ?/ ]9 \/ J4 }3 B$ B0 a
  7.   {: W$ `9 u2 {/ A  A

  8. 2 [6 ?, r& p6 w, Q
  9.     UserButtonState = BUTTON_PRESSED;
    & l( Q7 G5 S5 X4 u; Y2 Y) v

  10. $ C1 r: S* b& [; G) D; _
  11.   }
    3 I5 P% q$ V4 P. c
  12. 6 b  Z# A/ n5 [
  13. }
复制代码
17.png
  _9 {; x' _, S
  1. #if 1: }0 C) h; K8 }1 O

  2. ( F) m5 o6 B' J5 ^+ d5 E
  3.     /* BUTTON BSP测试 */; Q* P8 U' t* B1 T
  4. % T# P% B3 `) x3 U  \. f
  5.     if (UserButtonState == BUTTON_PRESSED)
    ( r+ d! R& h7 F! g/ k$ Y

  6. $ j0 L6 B9 |1 X$ H# ^) g
  7.     {
    0 c" O' }5 G. t  b
  8. + T5 h5 O4 h+ R8 z$ Y) ?" T
  9.       UserButtonState = BUTTON_RELEASED;
    % A9 ~. h) m) n. [/ e% K! X

  10. 5 T1 s# x& B  ^6 c- g" X
  11.       BSP_LED_Toggle(LED_GREEN);
    3 C2 A. m( k0 T2 V
  12. 0 }2 Q& z4 k# _2 _/ p6 U* c
  13.     }4 U6 A/ [3 V. t* ~

  14. 0 N$ s0 G4 ?  v- ?, {
  15. #endif
复制代码
1 a' P9 Z$ _3 U6 @, s" A5 O
18.png

4 d. s; z) H5 T+ |; M1 U
USER按键按下后LED就会进行翻转
! Y# j  C5 A1 S! q7 o
模板工程(额外增加了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
流程写的很详细,可以按照之前申请的内容再扩展一下
6 i1 Z% r( x$ s2 q
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版