STM32G431RBT6 串口
串口通信(Serial Communication), 是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式。这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低。(来源百度百科)
从产品手册上中截取上图可以看出USB是连接到串口的可以通过传输线直接接收调试串口数据,根据CT117E-M4可以看到产品上自带DAP不需要再接其它的下载器。
1.配置RCC
2.配置SYS
3.串口配置
串口是异步串行通信(Asynchronous),串口配置时先选中指定的引脚配置成RX/TX再进入串配置界面选择模式,相关参数配置(波特率、数据位、校验位、停止位等)更具自己需求调整。
在中断配置界面对串口中断进行相关配置,使能串口中断并根据自身情况配置优先级,一般情况优先级默认即可。
也可以通过对DMA进行配置实现串口传输,由于是专用通道会只在传输开始时和结束时会产生中断占用CPU,可以提高项目运行的效率。
4.时钟配置
//阻塞式发送函数
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
//非阻塞式发送函数(中断)
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
//发送完毕中断回调函数
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart);
//中断处理函数接收句柄结构体的函数指针回调(执行)结构体中定义的函数指针指向自己定义的回调函数。
// 重定向c库函数printf到串口DEBUG_USART,重定向后可以使用printf函数
int fputc(int ch,FILE *fp)
{
HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,1000);
return (ch);
}
这里使用到了回调函数,而且cubemx生成的回调函数时虚函数,需要自己重写实现回调功能,类似中断处理函数,实际上如接收中断回调函数就是在串口中断处理函数中使用的中断快结束时被调用触发回调。这里写一个回调函数的示例:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){
if(huart->Instance == USART1)
{
//要处理的代码或标志位
/* */
//重新调用串口接收中断函数等待下次触发
HAL_UART_Receive_IT(&huart1,&Rx,sizeof(RX));
}
}