规划:
1.使能IO口时钟。配置寄存器RCC_APB2ENR。
2.初始化IO口模式。配置寄存器GPIOx_CRH/CRL。
3.操作IO口,输出高低电平。配置寄存器GPIOX_ODR或者BSRR/BRR。
实际操作步骤:
和跑马灯基于库函数一样,需要新建文件夹和.c和.h文件,以及相关路径的添加。(不熟的可以参照跑马灯基于库函数的文章)
1.在stm32f10x_rcc.h中检索RCC
2.在stm32f10x.h中检索RCC_TypeDef
3.根据stm32配有的参考手册找到RCC下对应的APB2ENR
4.根据上面检索的信息编写led.h文件
#ifndef __LED_H
#define __LED_H
void LED_Init(void);
#endif
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;//ÉèÖõÚÎåλΪÍÆÍìÊä³öģʽ£¬50MHz
GPIOB->ODR|=1<<5;//µÚÎåλÊä³ö¸ßµçƽ
//GPIOE.5
GPIOE->CRL&=0XFF0FFFFF;//ÇåÁã
GPIOE->CRL|=0X00300000;//ÉèÖõÚÎåλΪÍÆÍìÊä³öģʽ£¬50MHz
GPIOE->ODR|=1<<5;//µÚÎåλÊä³ö¸ßµçƽ
}
6.编写主函数
main.c
#include "stm32f10x.h"
#include "led.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);
}
}
7.烧录程序并测试结果。(可通过注释main.c中部分程序并重新编译的方法验证是否烧入的是现有程序,避免其他因素影响测试结果)