GPIO的使用-以点亮LED为例
使用GPIO一共需要两个步骤:
- 1、需要打开GPIO的对应时钟,使用单片机的外设时,需要先打开对应的时钟后才能使用相应外设。 根据外设在系统总线上的分布,调用stm32f10x_rcc中的函数:RCC_APB2PeriphClockCmd让时钟使能
- 2、调用GPIO库函数,初始化对应的GPIO端口,其中需要设置的有:GPIO的管脚号,GPIO的速度以及GPIO的运行模式。
根据中文参考手册可以查询到GPIOA在APB2这条时钟总线上:
编写初始化函数,并调用库函数来开启时钟:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
从GPIO库中调用GPIO初始化函数,完整代码如下:
void LED_Init(void) {
GPIO_InitTypeDef GPIO_InitStruct;
// 时钟使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
// GPIO初始化
GPIO_Init(GPIOC, &GPIO_InitStruct);
}
GPIO的使用:
GPIO库中提供多个函数
以点亮LED为例,可以使用不同的函数来实现功能,代码如下:
void LED_Play(void) {
u16 i = 0;
// 方法一
// 该方法控制GPIO指定位输出电平
// GPIO_ResetBits(GPIOC, GPIO_Pin_13);
// 方法二
// 该方法控制GPIO指定位输出指定电平
GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_RESET);
//SysTickDelayMs(100);
delay_us(900);
GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_SET);
// SysTickDelayMs(100);
delay_us(900);
// 方法三
// 对整个GPIO端口的所有位进行操作,因此写入的数值为16进制数
// 同时对整个IO口进行写入
// GPIO_Write(GPIOC, 0xEF);
//实现呼吸灯
//实现呼吸灯需要注意,延时函数需要用us级,ms级时间过慢
//设置的延时参数最小不能小于1,否则不会产生呼吸效果并且无法实现呼吸的反转
for(i = 0; i<1000; i++) {
//由亮变暗
GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_RESET);
//SysTickDelayMs(100);
delay_us(1+i);
GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_SET);
// SysTickDelayMs(100);
delay_us(1000-i);
if(i == 999) {
for(i = 0; i<1000; i++) {
//由暗变亮
GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_RESET);
//SysTickDelayMs(100);
delay_us(1000-i);
GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_SET);
// SysTickDelayMs(100);
delay_us(1+i);
}
}
}
}