单片机学习小组
登录
直播中
贾桂林
7年用户
1505经验值
私信
关注
怎样通过STM32F103寄存器去点亮LED流水灯呢
开启该帖子的消息推送
STM32F103
寄存器
怎样通过
STM32
F103寄存器去点亮LED流水灯呢?有哪些基本步骤?
回帖
(1)
李雪飞
2022-2-11 15:55:04
一、stm32简介
从字面意义来看:ST:意法半导体,是一个公司的名字。
M:Microelectronics的缩写,表示微控制器
32:32bit的意思,表示这是一个32bit的微控制器
STM32 属于一个微控制器,适用于控制类,自带了各种常用通信接口,比如 USART、 I2C、 SPI 等,可接非常多的传感器,可以控制很多的设备。现实生活中,我们接触到的很多电器产品都有 STM32 的身影,比如智能手环,微型四轴飞行器,平衡车、移动POS机,智能电饭锅,3D 打印机等等。
stm32是意法半导体(ST)集团生产的。意法半导体(ST)集团于1988年6月成立,是由意大利的SGS微电子公司和法国Thomson半导体公司合并而成。1998年5月,SGS-THOMSON Microelectronics将公司名称改为意法半导体有限公司,是世界最大的半导体公司之一。推出的STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex®-M0,M0+,M3, M4和M7内核。其实一个芯片是由内核和外设构成的,ST公司是造芯片的,但用的是ARM公司的内核再加上自己的外设构成一个完整的STM芯片,所以用ST命名。
二、stm32 F103介绍
STM32F系列属于中低端的32位ARM微控制器,该系列芯片是意法半导体(ST)公司出品,其内核是Cortex-M3[^1]。
该系列芯片按片内Flash的大小可分为三大类:小容量(16K和32K)、中容量(64K和128K)、大容量(256K、384K和512K)。
芯片集成定时器Timer,CAN,ADC,SPI,I2C,USB,UART等多种外设功能。
三、流水灯实验
1. 流水灯实验详悉
板子供电有两种方式: 通过U3 USB-micro接口提供5V供电,然后经过板载的LDO芯片转为VCC3V3;通过P2 接口,即SWD下载接口中的VCC3V3给核心板供电。
核心板上有两个LED,其中一个为电源指示灯PWR,另外一个LED与PC13引脚相连,当PC13置高时,LED灭;当PC13置低时,LED亮;
核心板上的跳线是为了选择启动模式使用。我们为了让程序以主闪存存储器作为启动区域,需要将BOOT0置低,BOOT1随意,此种启动模式是最常用的用户FLASH启动,为默认启动模式;
核心板上的按键为RESET复位按键;
P2接口为SWD下载模式对应的引脚接口。
2.点亮LED灯
需要用到GPIO端口。
为了点亮LED灯,需要三个步骤:
打开GPIO口的时钟
初始化GPIO口(选择推挽输出)
设置低电平
3.keil新建项目
4.寄存器映射
每个寄存器都是32bit,占用4个Byte即4个存储单元。可以把寄存器看作一个特殊的单元,一个这样的单元占32bit,只要找到这个单元的起始地址就可以对其进行操作。
其映射地址 = 外设总基地址(块基地址)+ 总线相对于外设总基地址的偏移 + 具体外设基地址相对于总线基地址的偏移 + 寄存器相对于具体外设基地址的偏移。
寄存器操作
直接地址操作访问
以GPIOB_ODR寄存器为例:
我们找到 GPIOB 端口的输出数据寄存器 ODR 的地址是 0x4001 0C0C(至于这个地址如何找到可以参考–怎么找到某个寄存器的地址?查看数据手册),ODR 寄存器是 32bit,低 16bit 有效,对应着 16 个外部 IO,写 0/1 对应的的 IO 则输出低/高电平。现在我们通过 C 语言指 针的操作方式,让 GPIOB 的 16 个 IO 都输出高电平。
通过绝对地址访问内存单元
// GPIOB 端口全部输出 高电平 *(unsigned int*)(0x4001 0C0C) = 0xFFFF;
0x4001 0C0C在我们看来是 GPIOB端口 ODR的地址,但是在编译器看来,这只是一个 普通的变量,是一个立即数,要想让编译器也认为是指针,我们得进行强制类型转换,把 它转换成指针,即(unsigned int *)0x4001 0C0C,然后再对这个指针进行 * 操作。 刚刚我们说了,通过绝对地址访问内存单元不好记忆且容易出错,我们可以通过寄存 器的方式来操作。
通过寄存器别名方式访问内存单元
// GPIOB 端口全部输出 高电平#define GPIOB_ODR (unsigned int*)(GPIOB_BASE+0x0C)* GPIOB_ODR = 0xFF;
为了方便操作,我们干脆把指针操作“*”也定义到寄存器别名里面.
// GPIOB 端口全部输出 高电平#define GPIOB_ODR *(unsigned int*)(GPIOB_BASE+0x0C)GPIOB_ODR = 0xF
5.代码.c语言
6.连接威廉希尔官方网站
7.配置环境
连上串口之后要把板子上的boot0置1,boot1置0,并且要在烧录之前按下reset键
8.flymcu
四、汇编语言
新建项目,与前面一致 ,稍有不同在于不选择Starup,不然会烧录不成功。
五、总结
通过本次实现,第一次接触硬件上的连接,遇到非常多的麻烦,通过不断查阅资料,完成了本实验。
一、stm32简介
从字面意义来看:ST:意法半导体,是一个公司的名字。
M:Microelectronics的缩写,表示微控制器
32:32bit的意思,表示这是一个32bit的微控制器
STM32 属于一个微控制器,适用于控制类,自带了各种常用通信接口,比如 USART、 I2C、 SPI 等,可接非常多的传感器,可以控制很多的设备。现实生活中,我们接触到的很多电器产品都有 STM32 的身影,比如智能手环,微型四轴飞行器,平衡车、移动POS机,智能电饭锅,3D 打印机等等。
stm32是意法半导体(ST)集团生产的。意法半导体(ST)集团于1988年6月成立,是由意大利的SGS微电子公司和法国Thomson半导体公司合并而成。1998年5月,SGS-THOMSON Microelectronics将公司名称改为意法半导体有限公司,是世界最大的半导体公司之一。推出的STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex®-M0,M0+,M3, M4和M7内核。其实一个芯片是由内核和外设构成的,ST公司是造芯片的,但用的是ARM公司的内核再加上自己的外设构成一个完整的STM芯片,所以用ST命名。
二、stm32 F103介绍
STM32F系列属于中低端的32位ARM微控制器,该系列芯片是意法半导体(ST)公司出品,其内核是Cortex-M3[^1]。
该系列芯片按片内Flash的大小可分为三大类:小容量(16K和32K)、中容量(64K和128K)、大容量(256K、384K和512K)。
芯片集成定时器Timer,CAN,ADC,SPI,I2C,USB,UART等多种外设功能。
三、流水灯实验
1. 流水灯实验详悉
板子供电有两种方式: 通过U3 USB-micro接口提供5V供电,然后经过板载的LDO芯片转为VCC3V3;通过P2 接口,即SWD下载接口中的VCC3V3给核心板供电。
核心板上有两个LED,其中一个为电源指示灯PWR,另外一个LED与PC13引脚相连,当PC13置高时,LED灭;当PC13置低时,LED亮;
核心板上的跳线是为了选择启动模式使用。我们为了让程序以主闪存存储器作为启动区域,需要将BOOT0置低,BOOT1随意,此种启动模式是最常用的用户FLASH启动,为默认启动模式;
核心板上的按键为RESET复位按键;
P2接口为SWD下载模式对应的引脚接口。
2.点亮LED灯
需要用到GPIO端口。
为了点亮LED灯,需要三个步骤:
打开GPIO口的时钟
初始化GPIO口(选择推挽输出)
设置低电平
3.keil新建项目
4.寄存器映射
每个寄存器都是32bit,占用4个Byte即4个存储单元。可以把寄存器看作一个特殊的单元,一个这样的单元占32bit,只要找到这个单元的起始地址就可以对其进行操作。
其映射地址 = 外设总基地址(块基地址)+ 总线相对于外设总基地址的偏移 + 具体外设基地址相对于总线基地址的偏移 + 寄存器相对于具体外设基地址的偏移。
寄存器操作
直接地址操作访问
以GPIOB_ODR寄存器为例:
我们找到 GPIOB 端口的输出数据寄存器 ODR 的地址是 0x4001 0C0C(至于这个地址如何找到可以参考–怎么找到某个寄存器的地址?查看数据手册),ODR 寄存器是 32bit,低 16bit 有效,对应着 16 个外部 IO,写 0/1 对应的的 IO 则输出低/高电平。现在我们通过 C 语言指 针的操作方式,让 GPIOB 的 16 个 IO 都输出高电平。
通过绝对地址访问内存单元
// GPIOB 端口全部输出 高电平 *(unsigned int*)(0x4001 0C0C) = 0xFFFF;
0x4001 0C0C在我们看来是 GPIOB端口 ODR的地址,但是在编译器看来,这只是一个 普通的变量,是一个立即数,要想让编译器也认为是指针,我们得进行强制类型转换,把 它转换成指针,即(unsigned int *)0x4001 0C0C,然后再对这个指针进行 * 操作。 刚刚我们说了,通过绝对地址访问内存单元不好记忆且容易出错,我们可以通过寄存 器的方式来操作。
通过寄存器别名方式访问内存单元
// GPIOB 端口全部输出 高电平#define GPIOB_ODR (unsigned int*)(GPIOB_BASE+0x0C)* GPIOB_ODR = 0xFF;
为了方便操作,我们干脆把指针操作“*”也定义到寄存器别名里面.
// GPIOB 端口全部输出 高电平#define GPIOB_ODR *(unsigned int*)(GPIOB_BASE+0x0C)GPIOB_ODR = 0xF
5.代码.c语言
6.连接威廉希尔官方网站
7.配置环境
连上串口之后要把板子上的boot0置1,boot1置0,并且要在烧录之前按下reset键
8.flymcu
四、汇编语言
新建项目,与前面一致 ,稍有不同在于不选择Starup,不然会烧录不成功。
五、总结
通过本次实现,第一次接触硬件上的连接,遇到非常多的麻烦,通过不断查阅资料,完成了本实验。
举报
更多回帖
rotate(-90deg);
回复
相关问答
STM32F103
寄存器
怎样
去
点亮
基于GPIO
寄存器
的
LED
流水灯
呢
2022-02-11
821
如何利用
STM32F103
去
点亮
一种
流水灯
呢
2022-02-11
896
如何使用
STM32F103
系列芯片以
寄存器
的方式
点亮
LED
流水灯
2022-02-11
1636
如何利用
STM32F103
寄存器
方式
点亮
LED
流水灯
?
2022-02-08
1762
如何利用
STM32F103
寄存器
方式
点亮
LED
流水灯
?
2022-02-11
1047
怎样
在
STM32F103
开发板上去
点亮
第一个
流水灯
呢
2022-02-23
923
如何
去
实现一种
STM32F103
点亮
LED
流水灯
的设计
2022-02-11
1254
如何用
STM32F103
C8T6
寄存器
点亮
LED
流水灯
?
2022-01-20
1239
基于
寄存器
与基于固件库的
stm32
LED
流水灯
编程方式有何差异
2021-12-06
1660
怎样
通过
寄存器
去
控制
STM32F
4 IO口的高低电平
2022-02-11
1509
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分