本实验所采用的开发板为正点原子的MiniSTM32f103rc开发板,主函数程序如下,注释如下:
main.c
#include "stm32f10x.h" void Delay(u32 count) { u32 i=0; for(;i<count;i++); } int main(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE); //使能PA,PD端口时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //LED0-->PA.8 端口配置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz GPIO_Init(GPIOA, &GPIO_InitStructure); //根据设定参数初始化GPIOA.8 GPIO_SetBits(GPIOA,GPIO_Pin_8); //PA.8 输出高 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //LED1-->PD.2 端口配置, 推挽输出 GPIO_Init(GPIOD, &GPIO_InitStructure); //推挽输出 ,IO口速度为50MHz GPIO_SetBits(GPIOD,GPIO_Pin_2); //PD.2 输出高 while(1) { GPIO_ResetBits(GPIOA,GPIO_Pin_8); GPIO_SetBits(GPIOD,GPIO_Pin_2); Delay(3000000); GPIO_SetBits(GPIOA,GPIO_Pin_8); GPIO_ResetBits(GPIOD,GPIO_Pin_2); Delay(3000000); } }
如果使用正点原子厂家所提供的system文件下的delay.h的头文件,可以更加方便地进行延时,利用这个头文件的延时效果如下,主要调用了我们的delay_init()函数以及后面的delay_ms()函数即可:
#include "stm32f10x.h" #include "delay.h" void Delay(u32 count) { u32 i=0; for(;i<count;i++); } int main(void) { GPIO_InitTypeDef GPIO_InitStructure; delay_init(); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE); //使能PA,PD端口时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //LED0-->PA.8 端口配置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz GPIO_Init(GPIOA, &GPIO_InitStructure); //根据设定参数初始化GPIOA.8 GPIO_SetBits(GPIOA,GPIO_Pin_8); //PA.8 输出高 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //LED1-->PD.2 端口配置, 推挽输出 GPIO_Init(GPIOD, &GPIO_InitStructure); //推挽输出 ,IO口速度为50MHz GPIO_SetBits(GPIOD,GPIO_Pin_2); //PD.2 输出高 while(1) { GPIO_ResetBits(GPIOA,GPIO_Pin_8); GPIO_SetBits(GPIOD,GPIO_Pin_2); //Delay(3000000); delay_ms(300); GPIO_SetBits(GPIOA,GPIO_Pin_8); GPIO_ResetBits(GPIOD,GPIO_Pin_2); Delay(3000000); } }