实验目的
通过LED的实验掌握GPIO的输入输出模式、初始化与配置等,学习sysTick 时钟模块和中断的使用方法。主要实验内容有:
- 了解发光LED驱动原理和方法(GPIO输出初始化与配置)
- 按键采集功能(GPIO输入初始化与配置)
- 延时函数delay的写法(SysTick 定时器实现精准延时)
- 学习用中断的方法实现按键采集
实验内容
编写代码,配置按键和LED对应引脚GPIO所需要的模式,实验LED不同的闪烁模式和亮度变化。
实验要点
LED对应GPIO的配置
开始学习 GPIO 控制 LED 之前先了解两个概念:端口复用和重映射。
复用的概念解决了外设数量与单片机引脚数量不一致所导致的问题。重映射功能的外设由 A 引脚映射到 B 引脚(假设此时 B 引脚没有用到),通过这种机制就解决了多种外设同时使用同一引脚时所引起的冲突问题。
void initLED(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO初始化结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能GPIO时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //设置对应引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //工作速度50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //设置生效
GPIO_ResetBits(GPIOB, GPIO_Pin_5); //默认低电平,LED不亮
}
另外还用到了如下两个函数来点亮或者熄灭 LED:GPIO_SetBits(GPIOB, GPIO_Pin_5);
GPIO_ResetBits(GPIOB, GPIO_Pin_5);
在IDE中打开定义可以查看其内容。
按键对应GPIO的配置
void initKey(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO初始化结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能GPIO时钟
GPIO_InitStructure.GPIO_Pin = KEY_UP_PIN|KEY_DOWN_PIN; //设置按键对应引脚 UP->PA0, DOWN->PA1
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置上拉输入
GPIO_Init(GPIOA, &GPIO_InitStructure); //设置生效
}
Systick的配置
/**
* 功能:初始化Systick定时器
* 参数:None
* 返回值:None
*/
void initSysTick(void)
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //设置时钟源8分频
SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk; //使能中断
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; //开定时器
SysTick->LOAD = 9; //随意设置一个重装载值
}