一、操作STM32的GPIO
1、操作STM32的GPIO的三个步骤:
- 第一步:使用RCC开启GPIO时钟
- 第二步:使用GPIO_Init函数初始化GPIO
- 第三步:使用输出或者输入的函数控制GPIO口
2、RCC和GPIO外设重要的函数
二、LED闪烁
野火STM32F103VETb开发板的——
- LED连接的GPIO端口是GPIOB,GPIO端口时钟是RCC_APB2Periph_GPIOB;连接到SCL时钟线的GPIO:红灯是GPIO_Pin_5、蓝灯是GPIO_Pin_1、绿灯是GPIO_Pin_0
- 蜂鸣器连接的GPIO端口是GPIOA,GPIO端口时钟是RCC_APB2Periph_GPIOA;连接到SCL时钟线的GPIO:GPIO_Pin_8
主要在main.c文件里进行编写相关代码:
#include "stm32f10x.h" // Device header
#define SOFT_DELAY Delay(0x05FFFFF);
void Delay(__IO u32 nCount);
int main(void){
/*第一步使用RCC开启GPIO时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
/*第二步:使用GPIO_Init函数初始化GPIO*/
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
/*第三步:使用输出或输入函数控制GPIO口*/
//打开灯
//GPIO_ResetBits(GPIOB,GPIO_Pin_1);
//关闭灯
//GPIO_SetBits(GPIOB,GPIO_Pin_1);
/*
* 这个函数的第三个值可以是Bit_RESET或Bit_SET
* @arg Bit_RESET: to clear the port pin (clear 清空也就是置低电平,打开灯)
* @arg Bit_SET: to set the port pin (set 也就是重置高电平,关闭灯)
*/
//GPIO_WriteBit(GPIOB,GPIO_Pin_1,Bit_RESET);
while(1)
{
/*加入延时函数,实现闪烁*/
GPIO_ResetBits(GPIOB,GPIO_Pin_1);
SOFT_DELAY;
GPIO_SetBits(GPIOB,GPIO_Pin_1);
SOFT_DELAY;
}
}
void Delay(__IO uint32_t nCount) //简单的延时函数
{
for(; nCount != 0; nCount--);
}
三、LED流水灯
主要在main.c文件里进行编写相关代码:
#include "stm32f10x.h" // Device header
#define SOFT_DELAY Delay(0x05FFFFF);
void Delay(__IO u32 nCount);
void GPIO_SetBits_all(void);
int main(void){
/*第一步使用RCC开启GPIO时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
/*第二步:使用GPIO_Init函数初始化GPIO*/
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
//这里改为GPIO_Pin_All,也就是所有引脚都选中
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
/*第三步:使用输出或输入函数控制GPIO口*/
//打开灯
//GPIO_ResetBits(GPIOB,GPIO_Pin_1);
//关闭灯
//GPIO_SetBits(GPIOB,GPIO_Pin_1);
/*
* 这个函数的第三个值可以是Bit_RESET或Bit_SET
* @arg Bit_RESET: to clear the port pin (clear 清空也就是置低电平,打开灯)
* @arg Bit_SET: to set the port pin (set 也就是重置高电平,关闭灯)
*/
//GPIO_WriteBit(GPIOB,GPIO_Pin_1,Bit_RESET);
//一开始也必须要全部关闭
GPIO_SetBits_all();
while(1)
{
/*加入延时函数,实现闪烁*/
GPIO_ResetBits(GPIOB,GPIO_Pin_1);
SOFT_DELAY;
GPIO_SetBits_all();
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
SOFT_DELAY;
GPIO_SetBits_all();
GPIO_ResetBits(GPIOB,GPIO_Pin_0);
SOFT_DELAY;
//这也要写全部关闭
GPIO_SetBits_all();
}
}
void Delay(__IO uint32_t nCount) //简单的延时函数
{
for(; nCount != 0; nCount--);
}
//关闭所有的灯
void GPIO_SetBits_all(void){
GPIO_SetBits(GPIOB,GPIO_Pin_5);
GPIO_SetBits(GPIOB,GPIO_Pin_0);
GPIO_SetBits(GPIOB,GPIO_Pin_1);
}
四、蜂鸣器
主要在main.c文件里进行编写相关代码:
#include "stm32f10x.h" // Device header
#define SOFT_DELAY Delay(0x05FFFFF);
void Delay(__IO u32 nCount);
int main(void){
/*第一步使用RCC开启GPIO时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
/*第二步:使用GPIO_Init函数初始化GPIO*/
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
while(1)
{
/*第三步:使用输出或输入函数控制GPIO口*/
/*加入延时函数,实现间断声音*/
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
SOFT_DELAY;
GPIO_SetBits(GPIOA,GPIO_Pin_8);
SOFT_DELAY;
}
}
void Delay(__IO uint32_t nCount) //简单的延时函数
{
for(; nCount != 0; nCount--);
}