下面简单介绍下跑马灯程序主要需要配置的方面:
1. 配置GPIO模式
CRL和CRH寄存器用于配置STM32的IO口的模式和速率;
GPIO有8种工作模式:
1、输入浮空
2、输入上拉
3、输入下拉
4、模拟输入
5、开漏输出
6、推挽输出
7、推挽式复用功能
8、开漏复用功能
对应代码如下:
typedef enum
{
GPIO_Mode_AIN=0x0, 模拟输入
GPIO_Mode_IN_FLOATING=0x4, 浮空输入
GPIO_Mode_IPD=0x28, 下拉输入
GPIO_Mode_IPU=0x48, 上拉输入
GPIO_Mode_OUT_OD=0x14, 开漏输出
GPIO_Mode_OUT_PP=0x10, 通用推挽输出
GPIO_Mode_AF_OD=0x1C, 复用开漏输出
GPIO_Mode_AF_PP=0x0x18 复用推挽
}GPIOMode_TypeDef;
配置IO口的速率,定义IO的速率如下:
typedef enum
{
GPIO_Speed_10MHz=1,
GPIO_Speed_2MHz,
GPIO_Speed_50MHz
}GPIOSpeed_TypeDef;
下面再来看看如何定义配置速率、模式和引脚的结构体的,
typedef struct
{
uint 16_t GPIO_Pin;
GPIOSpeed_Typedef GPIO_Speed;
GPIOMode_Typedef GPIO_Mode;
}GPIO_InitTypeDef;
另外:
GPIO_InitTypeDef GPIO_InitStructure
上面代码语句表示的意思是:定义结构体变量GPIO_InitStructure;类似于int a的意思;GPIO_InitTypeDef可以理解为类似于int,GPIO_InitStructure可理解为类似于a的意思;
下面举例说明初始化PA8和PD2,代码如下:
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure
RCC_APB2PeriphClockCmd(RCC_APB2_Periph_GPIOA|RCC_APB2_Periph_GPIOD,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50Hz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;
GPIO_Init(GPIOD,&GPIO_InitStructure);
GPIO_SetBits(GPIOD,GPIO_Pin_2);
}
另外,设置PA8口为1,可以用如下语句:
GPIO_SetBits(GPIOA,GPIO_Pin_8);
若设置PA8位0,可以用如下语句:
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
最后就是在主函数main.c里面设置LED0和LED1的状态,然后翻转,实现小灯的交替闪烁,程序如下:
int main(void)
{
delay_init();
LED_Init();
while(1)
{
LED0=0;
LED1=1;
delay_ms(300);
LED0=1;
LED1=0;
delay_ms(300);
}
}
今天还学到了:在定义结构体时,里面的成员变量之间是分号;二定义枚举类型时,里面的成员变量之间用逗号分开;
另:int main(void)中,第一个int表示主函数的返回类型时整型,括号中的void表示形参是void;
2. 如果用户需要添加或者删除.h文件,但是一定要注意在头文件FWLib下的stm32f10x_conf.h 文件中注释掉删除的源文件对应的头文件;
3. 遗留问题
以后如果有时间的话,把GPIO的8种工作模式的各个含义整理一下,8种工作模式分别代表什么意思,在哪种情况下用哪种模式,都好好再整理下
上一篇:STM32F103RCT6引脚功能及使用
下一篇:STM32F103RCT6 LED灯程序设计
推荐阅读最新更新时间:2024-03-16 16:10