1.配置
首先创在STM32CubeMX中选择芯片型号STM32L431RCT6
a.配值时钟源:

b.配置串口:
小熊派开发板板载ST-Link并且虚拟了一个串口,原理图如下:
将开发板上的开关拨到AT-MCU模式,使PC的串口与USART1之间连接:
c.NVIC配置:
d.配置时钟树:
e.生成MDK工程 :
2.中断模式发送和接收数据
a.定义发送和接收缓冲区:
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
uint8_t hello[] = "USART1 IRQ is ready...\n";
uint8_t recv_buf;
/* USER CODE END 0 */
b.重新实现中断回调函数:
在NVIC一讲中我们探索了HAL库的中断处理机制,HAL中弱定义了一个中断回调函数 HAL_UART_RxCpltCallback
, 我们需要在用户文件中重新定义该函数,放在哪都可以,这里我放在 main.c
中:
/* USER CODE BEGIN 4 */
/* 中断回调函数 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
/* 判断是哪个串口触发的中断 */
if(huart ->Instance == USART1)
{
//将接收到的数据发送
HAL_UART_Transmit(huart, &recv_buf, 1,0);
//重新使能串口接收中断
HAL_UART_Receive_IT(huart, &recv_buf, 1);
}
}
/* USER CODE END 4 */
c.修改main函数:
在main函数中首先开启串口中断接收,然后发送提示信息:
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
//使能串口中断接收
HAL_UART_Receive_IT(&huart1, &recv_buf, 1);
//发送提示信息
HAL_UART_Transmit_IT(&huart1, (uint8_t*)hello, sizeof(hello));
/* USER CODE END 2 */
while (1)
{
}
}
最后,打开串口,按下复位键,串口助手中就会出现一行字符,然后再发送数据过去,串口也可以接收得到