STM32F103ZE跑马灯基于寄存器

规划:web

1.使能IO口时钟。配置寄存器RCC_APB2ENR。svg

2.初始化IO口模式。配置寄存器GPIOx_CRH/CRL。函数

3.操做IO口,输出高低电平。配置寄存器GPIOX_ODR或者BSRR/BRR。测试

实际操做步骤:code

和跑马灯基于库函数同样,须要新建文件夹和.c和.h文件,以及相关路径的添加。(不熟的能够参照跑马灯基于库函数的文章)xml

1.在stm32f10x_rcc.h中检索RCCblog

图片图片

2.在stm32f10x.h中检索RCC_TypeDef图片

图片

3.根据stm32配有的参考手册找到RCC下对应的APB2ENR图片it

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中部分程序并从新编译的方法验证是否烧入的是现有程序,避免其余因素影响测试结果)

图片图片