STM32F103ZE跑马灯基于寄存器

规划:

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

图片图片

发布了31 篇原创文章 · 获赞 28 · 访问量 9493

猜你喜欢

转载自blog.csdn.net/visual_eagle/article/details/104143306