目录
1.建立工程
2.打开GOIO端口的时钟
3.配置IO口为输出(控制CRL寄存器)
4.配置ODR寄存器
点亮LED灯的所需条件
1.建立工程
首先建立相关工程文件,具体以单片机型号选择,我这选择STM32F103VE系列
其次,建立相关的.c和.h文件
最后需要加入启动文件;如何下载启动文件;下面链接提供参考
STM32如何下载官方固件库_连月亮都想脱离地球的博客-CSDN博客_stm32官方固件库
加入固件库的启动文件
点击libraries
点击CMSIS文件
点击CM3文件
进入DEvicSupport
再往后都是进入第一个文件;直到进入arm文件
由于我使用的是高容量,所以选择第二个作为启动文件;
路径\STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup
需要包含头文件stm32f10x,h的头文件,强调,需要加入.h文件
建立SystemInit函数,目的是为了骗过编译器而不报错
2.打开GOIO端口的时钟
从图中得出需要将第3位置1来开启时钟
找到寄存器地址RCC,从图中得到地址为0x40021000,RCC的偏移码为0x18;所以需要加上偏移码,即0x40021000+0x18=0x40021018
代码如下
3.配置IO口为输出(控制CRL寄存器)
配置第2、3位为通用推挽输出。第0、1位为输出模式,速度为10MHZ,即0001
(1)表示以四个位为一个组合即0001换算十进制为1;(4*0)表示为以四个位为一组
4.配置ODR寄存器
找到寄存器地址,然后再找到GPIO的基地址
GPIOB的基地址为0x40010c00+偏移码(0c)
取反是为了让第0位置0;达到输出低电平的效果,然后小灯就亮
总体代码如下
int main(void )
{
//打开GPIOB端口的时钟
*(unsigned int *)0x40021018 |= ((1) << 3);//1左移0位,由于0x400100c编译器不能识别,需要强转
// 0x40010c00+0x0c=0x40010c0c;
//配置IO口为输出(控制CRL寄存器)
*(unsigned int *)0x40010c00 |= ((1) << (4*0));//1左移0位,由于0x400100c编译器不能识别,需要强转
//配置ODR寄存器
*(unsigned int *)0x40010c0c &= ~(1<<0); //1左移到第0位取反再跟它相与
}
//置位 |= 清0 &=~
void SystemInit()
{
//函数体为空目的是骗过编译器不报错
}
最后;若有出现有误的地方,欢迎评论。