参考:STM32F103系列最简易版点灯程序
作者:一只青木呀
发布时间:2020-10-21 11:40:38
网址:https://blog.csdn.net/weixin_45309916/article/details/109196950
目录
- 硬件
- 软件
- 点灯流程
- 使能GPIO端口E和B对应的时钟
- 找到GPIO对应的时钟
- 找到时钟对应的基地址(起始地址)
- 打开GPIO端口B和端口E对应的时钟(偏移地址——>寄存器)
- 找到LED灯对应的GPIO端口E和B寄存器的基地址
- 打开底板原理图找到LED灯的引脚
- 找到LED0和LED1对应的引脚
- 打开数据手册找到其基地址
- 设置其端口为输出模式
- 配置PE5为输出模式
- 配置PB5为输出模式
- 设置其为低电平(LED灯亮低电平触发)
- 设置PE5为低电平
- 设置PB5为低电平
- 烧写程序
硬件
STM32103最小系统开发板
注:江江视频使用的开发板是STM32103 C8T6
软件
keil软件
点灯流程
1、使能GPIO端口B和E对应的时钟
2、找到LED灯对应的GPIO端口E和B寄存器的基地址
3、设置其端口PE5、PB5为输出模式(端口配置寄存器)
4、设置其为低电平(输出数据寄存器)
使能GPIO端口E和B对应的时钟
找到GPIO对应的时钟
在STM32F1XX中文参考手册第二章存储器和总线构架
2.1 系统构架里找到
GPIOB、GPIOE对应的时钟为APB2,APB2和APB1都挂载在AHB系统总线上。
找到时钟对应的基地址(起始地址)
其基地址为:0x40021000
打开GPIO端口B和端口E对应的时钟(偏移地址——>寄存器)
找到了初始地址,下面就要找他的偏移地址,也就是找相对应的寄存器
由上图可知,这个寄存器有32位,我们将寄存器相应位数置为0或者1,可以打开其相应的功能。
代码实现:
复位和时钟控制器得基地址为:0x40021000
偏移值为:0x18
得到APB2外设寄存器地址为:0x40021018
使能IO端口B和IO端口E(即设置寄存器的第6位和第3位为1):
*(unsigned int *)0x40021018 |= 0x01 << 6;//强转成指针再取内容*(unsigned int *)0x40021018 |= 0x01 << 3;
找到LED灯对应的GPIO端口E和B寄存器的基地址
打开底板原理图找到LED灯的引脚
找到LED0和LED1对应的引脚
LED1对应的引脚为GPIO端口E的PE5
LED0对应的引脚为GPIO端口B的PB5
打开数据手册找到其基地址
可看到GPIO端口E的基地址为:0x4001 1800
可看到GPIO端口B的基地址为:0X4001 0C00
设置其端口为输出模式
配置PE5为输出模式
注:0-7为低 8-15为高 PE5 这个5就为低
代码实现:
上面得到了PE5的基地址为:0x40011800
偏移地址为:0x00
得GPIOE_CRL寄存器地址为:0x40011800
*(unsigned int *)0x40011800 |= (0x0001) <<20;//或操作不会改变其他位
配置PB5为输出模式
代码实现:
上面得到了PB5的基地址为:0X40010C00
偏移地址为:0x00
得GPIOB_CRL寄存器地址为:0X40010C00
*(unsigned int *)0x40010C00 |= (0x01) <<20;
设置其为低电平(LED灯亮低电平触发)
设置PE5为低电平
配置GPIOE_ODR(输出数据寄存器out date register)寄存器得第5位为0.
代码实现:
上面得到了PB5的基地址为:0x40011800
偏移地址为:0x0C
得GPIOE_ODR寄存器地址为:0x4001180C
*(unsigned int *)0x4001180C &= ~(0x01 <<5);
设置PB5为低电平
代码实现:
上面得到了PB5的基地址为:0X40010C00
偏移地址为:0x0C
得GPIOE_CRL寄存器地址为:0X40010C0C
*(unsigned int *)0x40010C00 &= ~(0x01 <<5);
烧写程序
程序代码:
下载安装烧写软件FlyMcu,USB转TTL也要安装好,接线,找到串口的IO口对应好。需要拔插一下boot按钮(boot0置1,上一篇讲过串口下载方式的原理讲解)。
按下复位键开始烧写,如下图所示:
这个是江江使用的烧写软件进行烧写过程显示:
boot0重新拔插置0,按压一下复位键
结果:两个灯都亮了!