1. 点亮LED灯详解(307.11)
- 标号一样的导线在物理上是连接在一起的。
- 将 PB8 或 PB9 拉低,就可以实现将对应的 LED 灯点亮。
- 常用的GPIO HAL库函数:
void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState
PinState);
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
typedef struct
{
uint32_t Pin;
uint32_t Mode;
uint32_t Pull;
uint32_t Speed;
} GPIO_InitTypeDef;
2. 按键点亮LED灯(轮询法)(308.12)
- 输入(按键):
- 输出(LED灯):
- LED1:PB8
- LED2:PB9
- 代码(key_test/MDK-ARM)
#define KEY_ON 0
#define KEY_OFF 1
uint8_t Key_Scan(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
{
if(HAL_GPIO_ReadPin(GPIOx, GPIO_Pin) == GPIO_PIN_RESET)
{
while(HAL_GPIO_ReadPin(GPIOx, GPIO_Pin) == GPIO_PIN_RESET);
return KEY_ON;
}else
{
return KEY_OFF;
}
}
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
if(Key_Scan(GPIOA, GPIO_PIN_0) == KEY_ON)
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_8);
if(Key_Scan(GPIOA, GPIO_PIN_1) == KEY_ON)
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_9);
}
}
3. 复位和时钟控制(RCC)(309.13)
复位
- 系统复位
当发生以下任一事件时,产生一个系统复位:
-
- NRST引脚上的低电平(外部复位)
- 窗口看门狗计数终止(WWDG复位)
- 独立看门狗计数终止(IWDG复位)
- 软件复位(SW复位)
- 低功耗管理复位
- 电源复位
当以下事件中之一发生时,产生电源复位:
-
- 上电/掉电复位(POR/PDR复位)
- 从待机模式中返回
- 备份区复位
备份区域拥有两个专门的复位,它们只影响备份区域。
当以下事件中之一发生时,产生备份区域复位。
-
- 软件复位,备份区域复位可由设置备份域控制寄存器 (RCC_BDCR)(见6.3.9节)中的BDRST位产生。
- 在VDD和VBAT两者掉电的前提下,VDD或VBAT上电将引发备份区域复位。
时钟控制
- 什么是时钟?
时钟打开,对应的设备才会工作。
- 时钟来源
- 三种不同的时钟源可被用来驱动系统时钟(SYSCLK)
- HSI振荡器时钟(高速内部时钟)
- HSE振荡器时钟(高速外部时钟)
- PLL时钟(锁相环倍频时钟)
- 二级时钟源:
- 40kHz低速内部RC(LSIRC)振荡器
- 32.768kHz低速外部晶体(LSE晶体)
- 如何使用CubeMX配置时钟