关注分享主机优惠活动
国内外VPS云服务器

STM32串行通信(HAL库2)

摘要:这是上一篇博文的延续。 。 。 编写串口中断函数。 当中断发生时,程序执行中断服务函数。 只需编写与您的中断服务函数相对应的逻辑代码即可。 请注意,您必须通过编写以下代码将标准库包含在头文件中以重新定义串行端口输出。

这是上一篇博文的延续。 。 。

4 创建串口中断函数。

当中断发生时,程序执行中断服务函数。 只需编写与您的中断服务函数相对应的逻辑代码即可。

5 串口数据的接收和发送

现在我们需要介绍一些串口发送和接收的函数。

HAL_UART_Transmit();//串口发送数据,使用超时管理机制HAL_UART_Receive()。 ;//串口接收数据,使用超市管理机制HAL_UART_Transmit_IT()。 // 串口中断模式发送HAL_UART_Receive_IT()。 // 串口中断模式接收HAL_UART_Transmit_DMA()。 // 串口DMA模式发送HAL_UART_Transmit_DMA()。 // 串口DMA方式接收

接下来一些说明

串口发送数据

HAL_UART_Transmit(UART_HandleTypdef *huart,uint8_t *pData,uint16_t Size,uint32_t Timeout);/**函数:串口发送指定长度的数据。 如果没有超时,一旦完成就不再发送并返回超时标志参数。 UART_HandleTypedef *huart:串口别名UART_HandleTypeDef huart1;别名为huart1 *pData:要发送的数据大小:要发送的字节数 Timeout:最大发送时间,超过发送时间则停止发送**/

串口暂停数据接收

HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)/** 功能:串口中断接收,接收中断模式下指定长度的数据。 大致流程是设置数据存储位置、接收数据长度、使能串口中断。 当接收到数据时,会触发串口中断。 然后串口的中断函数进行处理,直到接收到指定长度的数据,之后关闭中断并进入中断接收回调函数。 这不会触发任何接收中断,并且只会触发一个中断。 参数: UART_HandleTypeDef *huart 与发送函数含义相同,串口的别名 *pData: 存放接收数据的地址 Size: 接收到的字节数**/ 6. 串口中断回调函数

由 HAL 库生成 Each中断函数存放在stm32l0xx_it.c文件内的代码文件中。 只需找到对应的串口中断、外部中断或定时器中断,右键单击函数定义即可在中断函数定义中找到中断回调函数。 发送串口中断回调一般为 *HAL_UART_TxCpltCallback(UART_HandleTypeDef huart);

HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart);

接收串口中断回调通常是 *HAL_UART_RxCpltCallback(UART_HandleTypeDef huart);

HAL_UART_RxCplt Callback(UART_HandleTypeDef *huart) ;

只需重写需要添加此函数的头文件即可。 。 下面是我的串口接收中断回调之一。 仅供参考。

oid HAL_UART_RxCPltCallback(UART_HandleTypeDef *huart){if(Uart1_Rx_Cnt >= 255) //溢出检测 {Uart1_Rx_Cnt = 0;memset(RxBuffer,0x00,sizeof(RxBuffer));HAL_UART_Transmit(&huart1, (uint8_t *)"数据溢出", 10,0xFFFF ); }else{RxBuffer[Uart1_Rx_Cnt++] = aRxBuffer; //接收数据传输 if((RxBuffer[Uart1_Rx_Cnt-1] == 0x0A)&&(RxBuffer[Uart1_Rx_Cnt-2] == 0x0D)) // 结束判断位 {HAL_UART_Transmit(&huart1, (uint8_t *) &RxBuffer, Uart1_Rx_Cnt, 0xFFFF); //发送接收到的信息 while(HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_TX);//检测UART传输结束 Uart1_Rx_Cnt = 0;memset (RxBuffer,0x00 ,sizeof(RxBuffer)); //清空数组}}HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1); //重新使能接收中断} 7. 串口发送重定义

通过串口发送数据时端口,调用HAL_UART_Transmit函数有点麻烦。 每次必须设置四个参数。 比刚开始学C的时候的printf函数方便很多,所以我一般都会将HAL_UART_Transmit函数重新定义为printf,直接使用printf发送数据。

是下面的代码写在uart.c中。

//重新定义串口输出到printfint。 fputc(int ch, FILE *C){ HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff); return ch;} **注:**头文件包含标准库(stdio.h)必须包括在内。

未经允许不得转载:主机频道 » STM32串行通信(HAL库2)

评论 抢沙发

评论前必须登录!