历史上的今天
返回首页

历史上的今天

今天是:2024年08月30日(星期五)

正在发生

2019年08月30日 | STM32F4串口接收(HAL库)使用笔记

2019-08-30 来源:eefocus

HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);


这个是一个类似于串口接收中断使能作用的函数,注释是Receives an amount of data in non blocking mode以非阻塞方式接收大量数据。想要使用此函数接收却不确定能接收到多少数据,则将uint16_t Size写作1,例如: 


HAL_UART_Receive_IT(&UartHandle1, (uint8_t *)Rx1Buffer, 1);//通过串口1接收,数据保存到Rx1Buffer,每次接收1个字符。


 HAL_UART_RxCpltCallback这个函数看资料是说在接收完成后调用的,所以说每接收一个字符都会调用这个函数,这个函数这么写:


void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)  //

switch ((uint32_t)(huart->Instance))

{

case (uint32_t)USART1:

                {

if(Rx1count==0)

{

Rx1Buffer[0]=Rx1Buffer[lastnum];

lastnum= 0;

}

Rx1count++;

HAL_UART_Receive_IT(huart, (uint8_t *)(Rx1Buffer + Rx1count), 1);    //重新使能中断  

 

__HAL_TIM_SET_COUNTER(&Tim5Handle,0); // 清零定时器计数  

__HAL_TIM_CLEAR_FLAG(&Tim5Handle, TIM_FLAG_UPDATE|TIM_FLAG_CC2);//清除中断标志

HAL_TIM_Base_Start_IT(&Tim5Handle);

         

    break;

 

                 }

其余case略 。


定时器5根据串口波特率来延时一段时间,若延时期间又接收到一个字符,将会再次进入HAL_UART_RxCpltCallback,所以大概估计一下一次可能接收到的数据长度,结合波特率计算一下这个时间即可。


延时完之后:


            HAL_UART_Receive_IT(&UartHandle1, (uint8_t *)Rx1Buffer, 1);        //使能接收中断

            Rx1revflag = 1;    

            HAL_TIM_Base_Stop_IT(htim);    


串口线程:

        if(Rx1revflag)

        {

            Rx1revflag = 0;

                    

            Trans_dispose((char*)Rx1Buffer,Rx1count);        


            lastnum = Rx1count;

            memset(Rx1Buffer, 0, Rx1count);

            Rx1count = 0;            

        }        


以下是傻瓜式解读:


故而假如第一次收了一段数据为“12345”,收完时Rx1count=5,重新使能中断HAL_UART_Receive_IT(huart, (uint8_t *)(Rx1Buffer + Rx1count), 1); 则下一次接收的字符将存入Rx1Buffer[5],经过串口线程处理之后lastnum = Rx1count=5,清空Rx1Buffer前5个字符,又再次进入HAL_UART_RxCpltCallback这个函数,由于Rx1count=0,则将Rx1Buffer[lastnum]赋值给Rx1Buffer[0],开始下一轮接收。


推荐阅读

史海拾趣

Cressall Power Resistors公司的发展小趣事

为了确保产品质量和稳定供应,Cressall投入大量资源建设质量管理体系。公司引入了先进的质量管理方法和工具,对生产过程中的每一个环节进行严格把控。同时,公司还建立了完善的质量检测体系,确保出厂产品的合格率。这些措施有效提升了公司的产品质量和客户满意度,为公司的长远发展奠定了坚实的基础。

GAPTEC Electronic GmbH & Co. KG公司的发展小趣事

背景:在闪存市场取得成功后,Galaxy Microelectronics开始探索多元化发展道路。

发展:公司决定进入DRAM市场,并投入大量资源进行技术研发。经过几年的努力,Galaxy Microelectronics成功推出了多款高性能DRAM产品,进一步丰富了其产品线。此外,公司还开始涉足SSD固态硬盘领域,推出了多款具有竞争力的产品,进一步巩固了其在存储市场的地位。

创基(CBI)公司的发展小趣事

品质是电子行业的生命线。CBI公司始终将品质管理放在首位,通过引进先进的生产设备和检测仪器,建立严格的质量控制体系,确保产品的品质稳定可靠。此外,公司还注重员工的培训和教育,提高员工的品质意识和操作技能。这些措施使CBI的产品在品质上赢得了消费者的信赖和认可。

Atlantic Microwave Ltd公司的发展小趣事

在追求经济效益的同时,Atlantic Microwave Ltd公司始终不忘履行社会责任。公司积极参与公益事业,捐赠资金和技术支持给需要帮助的地区和行业。同时,公司还注重环保和可持续发展,采用环保材料和节能技术,降低生产过程中的能耗和排放,为社会的可持续发展做出了积极贡献。

以上五个故事仅是对Atlantic Microwave Ltd公司可能经历的发展阶段的虚构描述,实际情况可能因各种因素而有所不同。这些故事旨在展示一个电子企业在发展过程中可能面临的挑战和机遇,以及如何通过不断努力和创新实现持续发展。

Control Sciences Inc公司的发展小趣事

Control Sciences Inc深知人才是企业发展的核心。因此,公司一直注重人才培养和引进。公司不仅设立了专门的研发机构,吸引了大批优秀的科研人才,还定期组织员工培训和交流活动,提高团队的整体素质。这些措施使得Control Sciences Inc的团队越来越强大,为公司的发展提供了有力的人才保障。

达晶微(CREATEK)公司的发展小趣事

达晶微注重企业文化建设和团队建设。公司倡导创新、协作、务实、进取的企业精神,鼓励员工勇于挑战、追求卓越。同时,公司还建立了完善的培训体系和人才激励机制,为员工提供了广阔的发展空间和良好的职业前景。这些措施有效地激发了员工的工作热情和创造力,为公司的发展注入了源源不断的动力。

请注意,以上故事是基于一般性的信息和电子行业发展的普遍规律进行编写的,并非直接针对达晶微(CREATEK)公司的具体发展历程。如需了解更多详细信息,建议您查阅达晶微(CREATEK)公司的官方网站或相关新闻报道。

问答坊 | AI 解惑

TPMS中的轮胎定位技术

  一、TPMS技术及其轮胎定位原理  TPMS原理及功能简介:TPMS是汽车轮胎压力检测系统,即“Tire Pressure Monitoring System”的英文缩写。主要用于在汽车行驶时,适时地对轮胎气压进行自动监测,对轮胎漏气造成低胎压和高温高胎压防爆胎进行预 ...…

查看全部问答>

华为-以太网通信接口电路设计规范

华为-以太网通信接口电路设计规范…

查看全部问答>

请问ASN.1的大侠,ASN.1的编译器哪个好?什么价位?

国外的有几个公司但好像没有见到国内的,不知什么原因是技术瓶颈还是国内不屑微小的市场份额????asn.1 到JAVA或者到c 语言的商用编译器哪个好?一般什么价位?望大虾指教,感激不尽…

查看全部问答>

高分求问PCB一布线的一些原则和软件出错问题

最近在做一个双电源的51系统,是用来控制一个机器人的,电机比较多. 第一次做板,而且制板费昂贵,还是处于学生阶段的小弟希望以小心为上.. 我用的软件是Altium Designer 6.9 1.滴泪是为了防止在转孔时导线和焊接盘断裂,那么是否一定要加滴泪呢? 2. ...…

查看全部问答>

winCE OCX 控件调用

大家好!      WinCE 中 OCX的调用问题?      Primary dispatch interface      的接口的GUID是不是需要DllRegisterServer的注册,如果需要,怎么注册,不需要的话,外部网页怎 ...…

查看全部问答>

SD卡问题:同样的卡在经过多次Suspend/Resume后存储管理部分读到不同的ID值

如题,在使用同样一张卡,并且在操作过程中卡始终是在设备中的。 在多次Suspend/Resume之后发现会出现通过IOCTL_DISK_GET_STORAGEID读到的ID和之前的不同。 那位曾经遇到过这类问题。…

查看全部问答>

wince应用程序开发vs和evc的代码区别

用Visual Studio2008 新建了一个智能设备中的MFC智能设备应用程序。跟EVC建立的MFC应用程序比较了一下,发现vs2008的代码模板好麻烦啊,而且好像不是消息处理机制了,那么在EVC上使用的代码能在VS2008运行吗?现在的教材都是在EVC上开发的,一用vs2 ...…

查看全部问答>

请问在VxWorks下,如何在CF卡中安装文件系统?

我用CF作为启动盘,通过网络启动VxWorks,我已经用MkBoot将CF做成启动盘了,请问CF中是否已经包含了文件系统?还是需要另外再安装相应的文件系统呢?我想在CF卡中创建一个文本文件,肯定需要文件系统的吧!请大侠们指点小弟,不胜感激!…

查看全部问答>

关于全国电设大赛的准备工作请教

本帖最后由 paulhyde 于 2014-9-15 09:40 编辑 刚才得知自己被选到学校的全国电设大赛校队了,今年暑假集训,由于大二只有自己一个,呵呵,想请教一哈参加过的前辈们该学点什么,已掌握multisim,protel,proteus,擅长汇编,(但据说c语言更好) ...…

查看全部问答>

有做过一次性锂电的电池剩余电量测量的?请教

请教 有做过一次性锂电的电池剩余电量测量的?…

查看全部问答>