思路还是:
①:使能IO口时钟。
②:初始化IO口
③:操作IO口,输出高低电平。
首先,我们先看原理图找到其中LED0和1的位置,分别对应PB5和PE5的GPIO口。
我们第一步,先写led.h文件
#ifndef __LED_H
#define __LED_H
void LED_Init(void);
#endif
然后来配置寄存器,写led.c文件
首先,我们先找到使能时钟寄存器
我们需要使用的是GPIOB和E
我们将它开启
步骤就是:
可以搜索RCC然后输入寄存器名称RCC->APB2ENR
然后把第3位和第6位打开 就是
RCC->APB2ENR|=1<<3;
RCC->APB2ENR|=1<<6;
时钟使能好之后,我们进行IO口初始化,我们接着查手册
去配置GPIO口的初始化
我们可以看到两个管一个口,底下又有介绍,我们要设置推挽输出,所以只需要0011即可,也就是3,
GPIOB->CRL&=0xFF0FFFFF;//先把其他的清掉
GPIOB->CRL|=0x00300000;//在设置我们的
然后GPIOE也类似这样设置
GPIOE->CRL&=0xFF0FFFFF;
GPIOE->CRL|=0x00300000;
初始化之后我们就得考虑 一开始是不亮的,我们得去找关于电平高低的寄存器
也就是输出
GPIOB->ODR|=1<<5;打开第五位
那么,我们led.c文件就配置好了
#include "led.h"
#include "stm32f10x.h"
void LED_Init(void)
{
RCC->APB2ENR|=1<<3;
RCC->APB2ENR|=1<<6;
//GPIOB.5
GPIOB->CRL&=0xFF0FFFFF;
GPIOB->CRL|=0x00300000;
GPIOB->ODR|=1<<5;
//GPIOE.5
GPIOE->CRL&=0xFF0FFFFF;
GPIOE->CRL|=0x00300000;
GPIOE->ODR|=1<<5;
}
接着,来写main函数
main函数很简单,也就是一开始让他置于高电平,设置延迟后,关闭。
#include "led.h"
#include "stm32f10x.h"
#include "delay.h"
int main(void){
delay_init();
LED_Init();
while(1)
{
GPIOB->ODR|=1<<5;
GPIOE->ODR|=1<<5;
delay_ms(500);
GPIOB->ODR=~(1<<5);
GPIOE->ODR=~(1<<5);
delay_ms(500);
}
}