一.说明
1.本人由标准库过渡到CubeMx的HAL库,写此篇的目的是为了记住一些重要步骤。
二.CubeMx配置好基础的底层代码
1.开启RCC时钟
2.开启SYS的debug
3.配置时钟树
4.配置串口并开启中断
三.在keil中使用
1.重要函数
HAL_UART_IRQHandler(UART_HandleTypeDef *huart); //串口中断处理函数
HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart); //串口发送中断回调函数
HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart); //串口发送一半中断回调函数(用的较少)
HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart); //串口接收中断回调函数
HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart);//串口接收一半回调函数(用的较少)
HAL_UART_ErrorCallback();串口接收错误函数
2.函数初始化部分需添加串口接收中断开启函数
/* USER CODE BEGIN 2 */
UART_Start_Receive_IT(&huart1,(uint8_t *)&rec_buffer,1);
/* USER CODE END 2 */
3.编写串口接收中断的回调函数(该函数被HAL库弱定义,可由用户再次编写)
注意要重新使能接收中断
uint8_t rec_buffer;
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)//中断回调函数
{
UNUSED(huart);
if(huart->Instance == USART1)//判断串口号
{
static uint8_t temp;
temp = rec_buffer;
if(temp == 0x01)
HAL_GPIO_WritePin(LEDD_GPIO_Port, LEDD_Pin, GPIO_PIN_SET);
else if(temp == 0x02)
HAL_GPIO_WritePin(LEDD_GPIO_Port, LEDD_Pin, GPIO_PIN_RESET);
HAL_UART_Transmit(&huart1,(uint8_t *)&rec_buffer,1,100); // 将接收到的数据再通过串口发送出去
HAL_UART_Receive_IT(&huart1, (uint8_t *)&rec_buffer, 1); //重新使能接收中断
}
}