1. 简单原理介绍
1. M3内核
STM32 以32位为一位,同时能处理32位。
stm32有A-G组引脚,每组最多有16个引脚。
M3内核系列有4GB的地址空间。
通常使用片上外设内存空间
0x40000000到0x5FFFFFFF
1B=8b; 1KB=1024B 1MB=1024KB
2. GPIO口在片上外设
GPIO端口C 0x4001 1000~0x4001 13FF
3. 寄存器
常用7个寄存器,在内存中依次排列,每个寄存器占四个字节
偏移地址 0x04
0x4001 1000是GPIO的基地址
GPIO寄存器描述
端口配置低寄存器(GPIOx_CRL)(x=A…E)
0 1 2 3确定一个引脚位
01输出模式 00通用输出模式
低寄存器配置低八位,高寄存器配置高八位
APB2外设时钟使能寄存器(RCC_APB2ENR)
在RCC寄存器中,0x4002 1000为基地址,偏移地址是0x18
RCC_APB2ENR的地址为0x4002 1018
偏移地址 0x18
复位值 0x0000 0000
位4:IOPCEN :IO宽口C时钟使能(I/Oport C clock enable)
0:IO端口C时钟关闭
1:IO端口C时钟打开
2. 点亮LED灯
本项目使用STM32RCt6。
点亮LED0
1.打开 PA8 对应的时钟
0x4002 1018只是一个值,把其变为单片机可以识别的地址需要用到指针
unsigned int* p;
- (unsigned int*) 0x4002 1018(指针内的值) |(1<<2)(打开时钟)
*(unsigned int *)0x4002 1018 |=(1<<2)
2.配置输出,确定输出模式
PA8属于高8位
== 先将对应控制位清零,再根据需要进行设置==
*(unsigned int*) 0x4001 0804 &=~0x0F
*(unsigned int*) 0x4001 0804 |=1
3.输出低电平
对端口速出寄存器进行操作
*(unsigned int*) 0x4001 080C &=0<<8;//输出低电平,点亮LED
*(unsigned int*) 0x4001 080C &=~(1<<8)//输出低电平,点亮LED
*(unsigned int*) 0x4001 080C |=(1<<8) //输出高电平,熄灭LED灯