赞
踩
目录
话不多说,直接上教程
文章末尾附源代码
这是 usart_dma.h 文件,里面都是配置所需功能的宏定义及串口相关的初始化函数和功能函数
配置的方法都·已经注释说明了,只需要启用需要使用的串口或者禁用不需要使用的串口即可
usart_dma.c 文件不用管 只需要配置该头文件就能使用了
void debug(char* p, ...); //串口调试输出
- #define PRINTF 1 // 1: 启用串口1调试输出 2: 启用串口2调试输出
- // 3: 启用串口3调试输出 4: 启用串口4调试输出
- // 5: 启用串口5调试输出 其他:禁用串口调试输出
- /******************************************************************************
- *方法名称: void User_Printf(UART_HandleTypeDef *huart,char *p,...)
- *功能: 使用指定的串口格式化输出
- *参数: * huart :用来输出数据的串口句柄
- * p, ...:需要输出的数据
- *返回: 无
- *说明: 无
- *******************************************************************************/
- void User_Printf(UART_HandleTypeDef *huart,char *p,...); //串口格式化输出
- /******************************************************************************
- *方法名称: void User_USART_UART_Init(UART_HandleTypeDef huart);
- *功能: 串口初始化输出
- *参数: 串口对应的 huart 句柄
- *返回: 无
- *说明: 用户串口DMA接收模式初始化函数
- 需在系统串口初始化函数 MX_USARTx_UART_Init(void) 结束时调用
- *******************************************************************************/
- void User_USART_UART_Init(UART_HandleTypeDef huart);
- // 用户 串口DMA接收模式初始化函数需在 系统初始化函数 MX_USARTX_UART_Init(void) 函数结束时调用
我这是在函数内部调用,你们也可在main函数中直接调用,只需保证在系统初始化函数后面就行
- /******************************************************************************
- *方法名称: void User_UART_RxCpltCallback(UART_HandleTypeDef *huart)
- *功能: 串口回调函数 重新开启串口DMA接收
- *参数: *huart: 串口对应的 huart 句柄
- *返回: 无
- *说明: 用户串口中断回调函数
- 需在系统中断函数 USARTx_IRQHandler() 结束时调用
- *******************************************************************************/
- void User_UART_RxCpltCallback(UART_HandleTypeDef* huart);
- //用户 串口中断回调函数 需在系统中断回调函数 USARTx_IRQHandler() 函数结束时调用
- /******************************************************************************
- *方法名称: unsigned char hand(char* rec_data,char *ptr)
- *功能: 校验字符串 rec_data 是否包含字符串 ptr
- *参数: rec_data :需要校验的字符串
- ptr :需要包含的字符串
- *返回: 校验结果 1:包含 0:不包含
- *说明: 无
- *******************************************************************************/
- unsigned char hand(char* rec_data,char *ptr);
- //校验字符串 rec_data 是否包含字符串 ptr 校验结果 1:包含 0:不包含
- void usart3(void)
- {
- /**************************************** 从这里添加串口3功能代码 ****************************************/
- if ( (USART_RX_STA & ~(0x0001<<2)) != 0) //串口3接收到数据
- {
- USART_RX_STA &= ~(0x0001<<2); //串口3清标志位
- if (hand((char *)u3NewBuffer, "QRcode")) //串口收到的数据是否包含 "QRcode"
- {
- destination=My_Atoi((char *)u3NewBuffer); //如果包含则执行这条代码
- }
- User_Printf(&huart1, "usart3:%s \n ", u3NewBuffer); //使用串口1发送串口3接收到的数据
- memset(u3NewBuffer, '\0', strlen((char *)u3NewBuffer)); // 清除串口3缓存数据
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。