总结
1、代码中的写入函数,也可以用上一章点亮LED代码中的 GPIO_ResetBits() 和 GPIO_SetBits()编写,大同小异。
2、各位初学者多注意观察差别,还是很好理解的。
3、延时函数直接用就行,不用过多理解,想了解的也可以。
4、代码已经编译下载成功,实际现象正确,放心食用。
#include "stm32f10x.h"
//微秒延时函数 参考江科大直接拿来用
void Delay_us(uint32_t xus)
{
SysTick -> LOAD = 72 * xus;
SysTick -> VAL = 0x00;
SysTick -> CTRL = 0x00000005;
while(!(SysTick->CTRL & 0x00010000));
SysTick -> CTRL = 0x00000004;
}
//毫秒延时函数
void Delay_ms(uint32_t xms)
{
while(xms--)
{
Delay_us(1000);
}
}
//主函数
int main(void)
{
//开启外设时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE) ;
//定义结构体
GPIO_InitTypeDef GPIO_InitStructure;
//结构体参数
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; // 推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; // 配置P1口
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ; // 50MHz频率
//端口初始化
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_WriteBit(GPIOA , GPIO_Pin_1 , Bit_SET);
GPIO_WriteBit(GPIOA , GPIO_Pin_2 , Bit_SET);
GPIO_WriteBit(GPIOA , GPIO_Pin_3 , Bit_SET); //我的实际现象中下载程序的一瞬间是全部点亮的,这里我手动配置一下开始全熄灭
while(1)
{
//Bit_RESET清空端口值,也就是低电平点亮LED
GPIO_WriteBit(GPIOA , GPIO_Pin_1 , Bit_RESET); //这个函数也可以给端口设置高低电平主要改第三个参数,也在gpio.h文件里
//既然是闪烁一亮一灭,那么我们就需要一个延时函数来控制亮灭的时间,不然变化太快肉眼看不见
//延时500毫秒
Delay_ms(500);
//配置PO2口 点亮
GPIO_WriteBit(GPIOA , GPIO_Pin_2 , Bit_RESET);
Delay_ms(500);
//配置PO3口 点亮
GPIO_WriteBit(GPIOA , GPIO_Pin_3 , Bit_RESET);
Delay_ms(500);
//Bit_SET配置端口值,也就是高电平熄灭LED
GPIO_WriteBit(GPIOA , GPIO_Pin_1 , Bit_SET);
Delay_ms(500);
GPIO_WriteBit(GPIOA , GPIO_Pin_2 , Bit_SET);
Delay_ms(500);
GPIO_WriteBit(GPIOA , GPIO_Pin_3 , Bit_SET);
Delay_ms(500);
}
}