STM32CubeMX的串口配置,以及驱动代码
1.STM32CubeMX的配置没啥子好说的,使能然后改一下波特率和字长,然后在将中断勾选,把中断等级调到1(一定要比systick的优先级垃圾!!!)

2.驱动代码
在生成的it.c文件中,例如用的是串口3,防止串口的ORE的bug粗现
void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */
if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_ORE)!=RESET)
__HAL_UART_CLEAR_OREFLAG(&huart1);
/* USER CODE END USART1_IRQn 0 */
HAL_UART_IRQHandler(&huart1);
/* USER CODE BEGIN USART1_IRQn 1 */ /* USER CODE END USART1_IRQn 1 */
}
在用户文件userUtility.c中,第一个函数也是为了防止串口出ORE的bug,第二个函数用于接收
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
{
if(__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE)!=RESET)
__HAL_UART_CLEAR_OREFLAG(huart);
}
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart == &huart1)
{
vUart1RecData();
}
else if(huart == &huart4)
{
vUart4RecData();
}
}
串口的驱动文件中
#define UARTX_RX_BUF_MAX_LEN 32
#define UARTX_TX_BUF_MAX_LEN 32 static uc prv_ucUartxRxBuf[UARTX_RX_BUF_MAX_LEN];
static uc prv_ucUartxRxLen;
static uc prv_ucUartxTxBuf[UARTX_TX_BUF_MAX_LEN];
static uc prv_ucUartxTxLen; void vStartUartxRecIt(void)//初始化函数,开启串口接收中断
{
HAL_UART_Receive_IT(&huart1, prv_ucUartxRxBuf,);
} void vUartxRecData(void)
{
prv_ucUartxRxLen=;
while(HAL_UART_Receive(&huart1, &prv_ucUartxRxBuf[prv_ucUartxRxLen], , )==HAL_OK)//进入阻塞接收2ms接不到就不算在同一包数据中,就是因为这里内部用了sysytick来延时,所以要注意中断优先级
{
prv_ucUartxRxLen++;
if(prv_ucUartxRxLen>=UARTX_RX_BUF_MAX_LEN)
{
break;
}
}
controlData.ucUart1RxFlg=;
} void vHandleUartxRxBuf(void)
{
if(controlData.ucUart1RxFlg==)//通过一个Flg来耦合接收和处理函数,处理函数看情况放在userWhile中或者直接放在TIM6的回调函数中,多少ms执行一次,充当实时任务
{
//
//Handle code
//
memset((uc *)&prv_ucUartxRxBuf,,sizeof(prv_ucUartxRxBuf));
controlData.ucUart1RxFlg=;
vStartUartxRecIt();
}
}
3.串口发送数据的时候
HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
这个函数最好用
__disable_irq();
和
__enable_irq();
夹起来,一来是为了防止发送的时候,有中断来造成数据传输有“断包”的现象,二来是避免发送数据的时候同时接到数据
产生ORE这种BUG
PS;有的人看到可能会说CLEAR_LG这个宏函数,要求输入的参数和GET_ERROR返回的值,参数类型不一样,但其实看一下底层的宏定义会发现,
就tm是同一个玩意儿


STM32CubeMX的串口配置,以及驱动代码的更多相关文章
- 三星framebuffer驱动代码分析
一.驱动总体概述 本次的驱动代码是Samsung公司为s5pv210这款SoC编写的framebuffer驱动,对应于s5pv210中的内部外设Display Controller (FIMD)模块. ...
- [置顶] 自娱自乐7之Linux UDC驱动2(自编udc驱动,现完成枚举过程,从驱动代码分析枚举过程)
花了半个月,才搞定驱动中的枚举部分,现在说linux的枚举,windows可能有差别. 代码我会贴在后面,现在只是实现枚举,你可能对代码不感兴趣,我就不分析代码了,你可以看看 在<自娱自乐1&g ...
- 小草手把手教你 LabVIEW 串口仪器控制——VISA 串口配置
建议大家按我发帖子的顺序来看,方便大家理解.请不要跳跃式的阅读.很多人现在看书,都跳跃式的看,选择性的看,导致有些细节的部分没有掌握到,然后又因为某个细节耽误很多时间.以上只是个人建议,高手可以略过本 ...
- JBOSS EAP 6 系列三 Oracle、Mysql数据源的配置(驱动)—认识模块的使用
本文介绍JBOSS EAP 6.2中Oracle数据源的配置方式.结合之前JBOSS EAP 6.2新功能,本文初识JBOSS模块申明式容器这一特性. 模块申明式容器:JBOSS EAP不再有lib的 ...
- Linux时间子系统之(十七):ARM generic timer驱动代码分析
专题文档汇总目录 Notes:ARM平台Clock/Timer架构:System counter.Timer以及两者之间关系:Per cpu timer通过CP15访问,System counter通 ...
- Linux时间子系统(十七) ARM generic timer驱动代码分析
一.前言 关注ARM平台上timer driver(clocksource chip driver和clockevent chip driver)的驱动工程师应该会注意到timer硬件的演化过程.在单 ...
- DHT11温湿度传感器模块使用方法和驱动代码实现
DHT11模块简介 DHT11是一款价格便宜,易于使用的温度湿度测量二合一传感器.它具有超小体积.极低功耗的特点.它使用单根总线与单片机进行双向的串行数据传输,信号传输距离可达20米以上.非常适用于对 ...
- 【STM32】STM32串口配置的一般步骤(库函数)
STM32串口配置的一般步骤(库函数)(1)串口时钟使能:RCC_APBxPeriphClockCmd(); GPIO时钟使能:RCC_AHBxPeriphClockCmd();(2)引脚复用映 ...
- eclipse代码自动提示设置、如何配置eclipse的代码自动提示功能(同时解决自动补全变量名的问题)?
对于编程人员来说,要记住大量的类名或类方法的名字,着实不是一件容易的事情.如果要IDE能够自动补全代码,那将为我们编程人员带来很大帮助. eclipse代码里面的代码提示功能默认是关闭的,只有输入“. ...
随机推荐
- css的继承和层叠
标签(空格分隔): css css称为层叠样式表,CSS有两大特性:继承性和层叠性,本章简单介绍一下继承性: 继承性: 定义:继承就是给父及设置了一些属性,子级继承了父及的该属性,这就是我们的css的 ...
- PHP拦截器之__set()与__get()的理解与使用方法
“一般来说,总是把类的属性定义为private,这更符合现实的逻辑. 但是,对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数“__get()”和“__set()”来获取和赋值 ...
- 浅谈https和http2
最近被问到http2和https的相关知识,这是一篇补基础的博客: 首先想说下https 什么是https https的主要用处: - 建立信息安全通道,保证数据传输的安全 - 确保网站的真实性,防止 ...
- python3安装pcap遇到的问题
最近想在win7上安装pypcap,遇到了一下问题,现在大概总结一下: 直接使用pip install pypcap,提示pcap.h not found: 网上下载pypcap安装包,运行pytho ...
- Hillstone设备管理-许可证安装
1.CLI命令行安装 登录安全网关,运行命令exec license install +许可证,如下图: 系统会提示重启后生效,重启设备即可. 2.web界面安装许可证 1)登录安全网关设备,依次点击 ...
- 复制粘贴插件(不包含 Flash)——clipboard.js
clipboard.js是现代化的“复制到剪切板”插件.不包含 Flash.gzip 压缩后仅 3kb.不依赖 Flash 或其他臃肿的框架.API:https://clipboardjs.com c ...
- 创建表结构的sql语句
1.创建表结构 表名: ODS_PSP_DIS_DAY_CALC create table ODS_PSP_DIS_DAY_CALC ( ID CHAR(32) NOT NULL, DIS ...
- linux下ping命令出现ping: sendto: Network is unreachable
问题:ping外网出现: sendto: Network is unreachable 查看: #route Route命令 : 在数据包没有有效传递的情况下,可以利用route命令查看路由表 [ro ...
- Spring bean的生命流程
Spring 是一个轻量级的 J2EE 开源框架,其目标是降低企业级应用开发难度,提高企业级应用开发效率.在日程开发中,我们会经常使用 Spring 框架去构建应用.所以作为一个经常使用的框架,了解其 ...
- FastDFS防盗链
FastDFS扩展模块内置了通过token来实现防盗链的功能.开启防盗链后,访问文件是需要在url中加两个参数:token和ts.ts为时间戳,token为系统根据时间戳和密码生成的信物.为了系统的安 ...