4542|3

23

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【 STM32WB55 测评】_03_第一个程序 [复制链接]

本帖最后由 lvxinn2006 于 2019-5-7 13:42 编辑

本次活动测评开发板STM32WB55 Nucleo Pack由ST意法半导体提供,感谢意法半导体对EEWorld测评的支持!https://www.stmcu.com.cn/Product/pro_detail/cat_code/STM32WB/family/81/sub_family/252/sub_child_family/0/layout/product

【实验目的】
· 熟悉如何通过原理图分析电路原理;
· 熟悉如何使用MCU的用户参考手册;
· 通过本实验掌握 GPIO 输出功能的使用方法;
· 初步熟悉单片机寄存器的配置方法;
· 用最少的代码点亮LED灯。

【实验环境】
· NUCLEO-WB55 Nucleo Pack开发板
· Keil MDK-ARM(Keil uVision 5.25.2.0)
· Keil.STM32WBxx_DFP.1.0.0.pack

【实验资料】
· NUCLEO-WB55 Nucleo Pack开发板原理图
· STM32WB55xx Data Sheets
· STM32WB55xx Reference manual(参考手册)

【实验分析
硬件分析
根据本人的习惯,拿到手的开发板,一般都先从底层硬件开始了解,新的单片机,也是从数据手册和参考手册入手,可能很多人更喜欢直接使用STM32CubeMX,也是个人习惯问题,更喜欢离单片机更近一些。
这次测评,我也尽量在后期测评中使用Cube,减少底层原理的分析,毕竟人们已经不太喜欢太多原理性的东西,还是简单为好,而且蓝牙BLE5.0协议栈部分,直接使用Cube将会大大减少工作量。
所有开发板功能的使用,首先都离不开原理图,先要得到开发板的原理图,点击如下地址,可以进入原理图下载页面
打开如下:
在页面中有两种板号的原理图,这两个分别是Nucleo板和USB Dongle板,检查我们手里的开发板,找到对应的板号:
在开发板的背面,可以看到,我手里的Nucleo开发板板号为MB1355,所以下载对应的文件:
下载后将文件解压出来:
可以看到,官方提供的硬件资源很全,原理图、PCB都给提供了,这点还是要给ST点赞的。
这套硬件资料是使用AltiumDesigner设计的,所以需要使用该软件打开,直接打开MB1355C.PrjPcb工程文件即可。
在打开工程文件的时候会提示很多依赖的PCB库不存在,基本可以无视,不影响我们使用原理图。
这里不对原理图进行分析,我们今天的目的是控制LED灯,直入正题,直接打开MCU.SchDoc:
这张图中包含了三个LED灯的原理图,直接看图,三个LED灯连接如下:
LED1        ——PB5
LED2        ——PB0
LED3        ——PB1
根据原理图,可以分析三个灯的开启条件:引脚高电平,点亮LED;引脚低电平,熄灭LED。

查询芯片参考手册
根据单片机的使用常识,在接触到一个新的单片机时,最先看的一定是参考手册(STM32WB55xx Reference manual)的前2~3章,这些章节有助于让我们从整体架构上对单片机有个了解。
这里跳过第一章的介绍,直接找功能框图,但是发现在参考手册里并没有找到这个框图,根据ST的习惯,一般都把功能框图放在数据手册里,查看数据手册(STM32WB55xx Data Sheets):
这里很清晰的看到整个芯片内部的组成架构,从这个图中可以清晰的看到,有两个MCU核心,Cortex-M0+和Cortex-M4,而且每个核心分别有一个属于自己的AHB Lite总线,M4核心控制了大部分外设,M0+只控制了无线IP部分,这也是M0+的使命所在,主要用来处理协议栈部分的程序。
可以看到GPIO的功能部分,是被M4核心独占的,M4核心才是本单片机的主CPU,我们写的程序默认也是又M4核心运行的。
了解完功能框图,接下来了解下时钟树,因为所有单片机的外设都是需要时钟进行工作的,所以单片机的时钟系统,是我们第二个需要知道的,时钟树在参考手册(STM32WB55xx Reference manual)的207页,如下图所示:
时钟系统在单片机中是一个比较复杂的系统,配置的寄存器也比较多,对于单片机新人,不建议自己配置时钟,可以借助STM32CubeMX工具进行配置。
本章不需要对时钟进行配置,使用系统默认的时钟配置。查看了RCC的相关配置,初始的系统工作时钟是4MHz,这不影响点LED灯。

配置GPIOB时钟

需要设置AHB2ENR的[1]位为1。

设置GPIOB
需要设置相应的位置,设置为01,即可设置引脚为输出模式。
通过写ODR寄存器,为引脚设置高低电平。

实验代码
新建项目



编写代码
代码清单如下:
  1. #include "stm32wbxx.h"                  // Device header
  2. enum{
  3.         LED1=5,
  4.         LED2=0,
  5.         LED3=1,
  6. };

  7. #define MODIFY(reg,mask,value)        MODIFY_REG((reg),(mask), (value)<<mask##_Pos)
  8. #define LED_ON(x)                                                                SET_BIT(GPIOB->ODR, 1<<x)
  9. #define LED_OFF(x)                                                        CLEAR_BIT(GPIOB->ODR, 1<<x)

  10. void SysTick_Handler(void)
  11. {
  12.         static int led = LED1;
  13.         switch (led){
  14.                 case LED1:
  15.                         LED_ON(LED1);
  16.                         LED_OFF(LED2);
  17.                         LED_OFF(LED3);
  18.                         led = LED2;
  19.                 break;
  20.                 case LED2:
  21.                         LED_OFF(LED1);
  22.                         LED_ON(LED2);
  23.                         LED_OFF(LED3);
  24.                         led = LED3;
  25.                 break;
  26.                 case LED3:
  27.                         LED_OFF(LED1);
  28.                         LED_OFF(LED2);
  29.                         LED_ON(LED3);
  30.                         led = LED1;
  31.                 break;
  32.         }
  33. }

  34. int main(void)
  35. {
  36.         SET_BIT(RCC->AHB2ENR, (1<<1));        //使能GPIOB时钟
  37.         MODIFY(GPIOB->MODER, GPIO_MODER_MODE0,         0x1);        //设置PB0为输出模式
  38.         MODIFY(GPIOB->MODER, GPIO_MODER_MODE1,         0x1);        //设置PB1为输出模式
  39.         MODIFY(GPIOB->MODER, GPIO_MODER_MODE5,        0x1);        //设置PB5为输出模式
  40.         
  41.         SysTick_Config(SystemCoreClock);        //节拍定时器1s周期
  42.         while (1){
  43.         }
  44. }
复制代码




编译代码:


设置调试器



烧写代码


按开发板上的Reset键复位开发板,运行程序。


【实验现象】
· 复位开发板以后,可以看到三个LED轮流点亮、熄灭,这也是所有单片机的最基础的流水灯实验
· 本例使用了Systick定时器,在定时器中对LED灯进行切换点亮。
效果如下:






本实验比较简单,主要也是为了熟悉一下新单片机的寄存器,以及数据手册的使用。
此帖出自stm32/stm8论坛

最新回复

存粹凑字数z换积分勿怪!!勿怪!!!!请勿怪!!!!千万勿怪!!!   详情 回复 发表于 2023-10-31 16:11
点赞 关注
 

回复
举报

1

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

老师您好    这块开发板最主要的功能是展示蓝牙无线功能的    这个测评未免不合时宜吧

此帖出自stm32/stm8论坛
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

存粹凑字数z换积分勿怪!!勿怪!!!!请勿怪!!!!千万勿怪!!!

此帖出自stm32/stm8论坛
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

4
 

存粹凑字数z换积分勿怪!!勿怪!!!!请勿怪!!!!千万勿怪!!!

此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

开源项目 更多>>
    随便看看
    查找数据手册?

    EEWorld Datasheet 技术支持

    相关文章 更多>>
    关闭
    站长推荐上一条 1/8 下一条

     
    EEWorld订阅号

     
    EEWorld服务号

     
    汽车开发圈

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表