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