STM32F103点亮LED,3种方式
1、寄存器
1.1、开启GPIOE对应时钟
1.1.1、找到GPIOE对应时钟
打开STM32F1xx中文参考手册,找到上图可以看到GPIOE是挂在AHB的APB2上的。
1.1.2、找到对应基地址
找到时钟控制的基地址。
用宏定义定义它的地址:
1.1.3、找到APB2的偏移地址
找到偏移地址
宏定义它的地址
不能:0x40021018|=1<<6,因为编译器默认0x40021018是数字,不是地址。
必须强制转换为指针变量,然后解引,往寄存器写数。
1.1.4、编写程序开启PE5时钟
找到PE5的时钟使能位
开启时钟
1.2、配置PE5对应寄存器
1.2.1、找到对应基地址
宏定义地址
1.2.2、找到配置寄存器IOPE的所有偏移地址
用指针指向寄存器地址,然后宏定义它
1.2.3、配置CRL寄存器
端口5配置为:输出模式50MHz、通用推挽输出模式
1.3、控制ODR或BSRR和BRR寄存器点亮LED
1.3.1、控制ODR寄存器亮灭
程序实现亮灭
1.3.2、控制BSRR和BRR寄存器亮灭
BRSS
BRR
程序实现亮灭
2、库函数
2.1、RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
2.1.1、2个形参
1.uint32_t 是无字符型整形
2.FunctionalState 形参可以是DISABLE或ENABLE,前者为0后者为1
2.1.2、IS_RCC_APB2_PERIPH(RCC_APB2Periph)
RCC_APB2Periph 就是时钟的基地址,比如GPIOE的基地址
2.1.3、IS_FUNCTIONAL_STATE(NewState)
NewState 是使能或关闭,1或0
2.1.4、assert_param()
指向地址内存,使能
2.1.5、RCC函数功能
开启时钟
2.2、结构体GPIO_InitTypeDef
2.2.1、uint16_t GPIO_Pin
typedef unsigned short int uint16_t;
无符号短整型,GPIO的第几位
2.2.2、GPIOSpeed_TypeDef GPIO_Speed
2.2.2.1、GPIOSpeed_TypeDef的3个成员
GPIO_Speed_10MHz = 1,
GPIO_Speed_2MHz,
GPIO_Speed_50MHz
输出时钟频率
2.2.3、GPIOMode_TypeDef GPIO_Mode
2.2.3.1、GPIOMode_TypeDef的8个成员
配置GPIO
2.3、GPIO_Init(GPIO_TypeDef* , GPIO_InitTypeDef* );
2个形参,第一个是PE端,第二个是结构体指针dig
功能:初始化配置端口
2.4、GPIO_SetBits(GPIO_TypeDef* , uint16_t );
2个形参,第一个是PE端,第二个是哪个口
功能:端口输出0
2.5、GPIO_ResetBits(GPIO_TypeDef* , uint16_t );
2个形参,第一个是PE端,第二个是哪个口
功能:端口输出1
2.6、点亮LED代码
3、位操作
3.1、开启时钟
3.2、配置PE5
3.3、宏定义位
3.3.1、找到PE5 ODR寄存器的位地址并宏定义
打开Cortex M3权威指南
n:第几位
GPIOE_ODR_Addr:ODR寄存器地址
BITBAND() :把PE5的位地址计算出来
MEM_ADDR():用指针指向内存内容,改变它的内容
3.3.2、用位操作点亮LED
PBout(5)=0;
4、按键控制LED亮灭
5、总结
不管是什么方式点亮LED,都需要3步
1:使能时钟。(AHB 、SPB2)
2:配置io口(CRL、CRH寄存器)
3:控制io口(ODR寄存器或BSRR和BRR寄存器)
扩展
1:读寄存器(IDR)
2:做按键输入时初始化要写一个高低电平(上拉下拉输入模式)
- 点赞
- 收藏
- 关注作者
评论(0)