1.GPIO作输入
PC0,PD3采用推挽上拉输出
PA0,PF11下拉为低电平
不管I/O管脚的默认配置如何,还是需要在输出的管脚外加上拉或下拉,这是为了保证芯片上电期间和复位时输出的管脚始终处于已知的电平。
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET)
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_RESET);//按键未按下时,灯亮,即初始时PA0为低电平
}
else
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_SET);//按键按下时,灯灭
}
if(HAL_GPIO_ReadPin(GPIOF, GPIO_PIN_11) == GPIO_PIN_RESET)
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_3, GPIO_PIN_RESET);
}
else
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_3, GPIO_PIN_SET);
}
2.中断
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == GPIO_PIN_0)
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_0); //改变PC0的状态,使灯实现亮灭之间的转换
}
3.定时器溢出
if(__HAL_TIM_GET_FLAG(&htim2, TIM_FLAG_UPDATE) == 1)//利用定时器计数溢出来实现延时
{
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_0);
HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_3);
//Clear TIM Flag
__HAL_TIM_CLEAR_FLAG(&htim2, TIM_FLAG_UPDATE);//清空定时器
}
4.串口测试接收数据
HAL_Delay(500);
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_0);//改变LED灯的状态
HAL_UART_Transmit(&huart1, strings, sizeof(strings), HAL_MAX_DELAY);