历史上的今天
返回首页

历史上的今天

今天是:2025年06月08日(星期日)

正在发生

2018年06月08日 | STM32F207Cube库函数USART中断接收

2018-06-08 来源:eefocus

USART初始化部分就不介绍了,直接看官方给的例程就能知道,现在主要将自己在学习过程中遇到的问题以及解决方法记录一下。

首先,如果使用了串口接收中断,就需要在初始化中打开中断以及设定中断优先级等常规操作。 
HAL_UART_Init(&UartHandle) -> HAL_UART_MspInit(huart)-> 
/* Set Interrupt Group Priority */ 
HAL_NVIC_SetPriority(USARTx_IRQn, 0, 1);

/* Enable the TIMx global Interrupt */ 
HAL_NVIC_EnableIRQ(USARTx_IRQn); 
然后需要调用串口接收终端初始化函数: 
/** 
* @brief Receives an amount of data in non blocking mode 
* @param huart: UART handle 
* @param pData: Pointer to data buffer 
* @param Size: Amount of data to be received 
* @retval HAL status 
*/ 
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

各个参数都有英文解释。 
根据网上资料显示,这个函数只能对串口中断接收进行一次接收,而且接收的字节大小是固定的uint16_t Size,但是在实际使用中,不可能完全满足每次接收到的字节数都是一样的,而且是确定的。所以大家采用的方法都是令uint16_t Size = 1;这样的话,每接收到一个字节就中断一次。

那么中断处理函数处理的规则应该是 
1、关闭此接收中断 
2、将接收到的数据转移至缓存器 
3、再次打开中断

根据Cube库函数给的函数以及示例,中断处理函数是: 
void USARTx_IRQHandler(void) 

HAL_UART_IRQHandler(&UartHandle); 

其中void USARTx_IRQHandler(void)对应的是不同的中断处理函数,但是终端中调用的都是HAL_UART_IRQHandler(&UartHandle); 因为HAL_UART_IRQHandler(&UartHandle);函数的参数不同,所以不会产生异常。

大家仔细看HAL_UART_IRQHandler(&UartHandle)这个函数,应该能发现两个问题: 
1、用户自己的中断处理函数在哪里不会影响库函数的完整性 
2、中断如何再次打开 
自己是新手,最初急于求成,没有认真学习函数中每一步,导致自己一直在纠结第一个问题:用户中断处理函数放在什么地方不影响库函数的完整性,后来详细阅读了源代码,发现库函数提供了一个可供用户重新定义的弱定义函数__weak void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) 
可以供用户重新定义函数内容,用户直接将自己的中断缓存数据部分放在此函数中,用户只需要在stm32f2xx_hal_msp_.c中重新定义此函数即可。 
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) 

UART1RxBuff[UART1RxBuffCount++] = aRxBuffer; 

同理,用户可以在 
HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) 
中再次调用 
HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) 
这样的话,就可以实现连续中断接收USART数据。

而且当需要多个串口中断接收的时候,上述中断处理函数如何进行中断缓存数据,如何区别时哪一个串口发送过来的数据。这里可以利用中断初始化中的UartHandle.Instance 这个成员变量,加上判断就能实现串口区别,最后产生的HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)函数应该如下: 
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) 

if(huart->Instance == USART1) 

UART1RxBuff[UART1RxBuffCount++] = aRxBuffer; 

HAL_UART_Receive_IT(huart, (uint8_t *)&aRxBuffer, 1) ; 
}

资料参考了:http://www.stm32cube.com/question/115 
谢谢admin的解决,谢谢每一个愿意为想我这样新手解决问题的人,谢谢每一个愿意帮助别人的人。 
所以这里做一个记录,以帮助那些可能遇到和我一样问题的人。


推荐阅读

史海拾趣

Hirosugi-Keiki公司的发展小趣事

对于门控夜明灯电路,网友们可能会有多种问题,以下是一些常见问题及其详细回答:

一、工作原理相关问题

  1. 问:门控夜明灯电路是如何实现自动开关的?
    : 门控夜明灯电路主要通过门控开关、延迟电路、光控电路和电源电路等几部分组成。当门打开时,门控开关触发电路,使电灯点亮。同时,延迟电路控制电灯的点亮时间,一般为几十秒左右。光控电路则确保在光线较暗的环境下(如夜晚)电路才会工作,而在白天则自动封锁电路,避免电灯误亮。

  2. 问:电路中的光控部分是如何工作的?
    : 电路中的光控部分通常由光敏电阻器(如MG45型)和相关的电子元件组成。光敏电阻器的阻值会随着光照强度的变化而变化。在白天,由于光照强度大,光敏电阻器呈现低阻值状态,导致电路中的某个三极管(如VT3)导通,进而封锁整个电路,使电灯不会点亮。而在夜晚,光照强度减弱,光敏电阻器呈现高阻值状态,三极管截止,电路恢复正常工作状态,受门控开关控制。

二、安装调试相关问题

  1. 问:如何安装门控夜明灯电路?
    : 安装门控夜明灯电路时,首先需要将干簧管安装在门框上,将小磁铁安装在门上,并确保两者在门关闭时能够对准并吸合。接着,将电路板固定在合适的位置,并连接好电源线和电灯线。最后,进行电路调试,确保电路能够正常工作。

  2. 问:如何调整电灯的点亮时间?
    : 电灯的点亮时间主要由延迟电路中的电阻和电容决定。要调整点亮时间,可以通过改变电阻(如R2)的阻值或电容(如C1)的容量来实现。一般来说,电阻阻值增大或电容容量增大,都会导致点亮时间延长;反之,则点亮时间缩短。

三、故障排除相关问题

  1. 问:如果电灯不亮,可能是什么原因?
    : 如果电灯不亮,可能是由多种原因造成的。首先,应检查电源是否正常,以及电路中的保险丝是否熔断。其次,检查门控开关是否工作正常,即干簧管和小磁铁是否能够在门打开时正确触发电路。此外,还应检查光控电路是否因光线过强而处于封锁状态。最后,检查电灯本身是否损坏。

  2. 问:电灯在白天也会亮,怎么办?
    : 如果电灯在白天也会亮,可能是光控电路出现了问题。首先,应检查光敏电阻器是否损坏或受到其他光源的干扰。其次,检查与光敏电阻器相关的电子元件(如VT3)是否工作正常。如果问题依然存在,可能需要重新调整光控电路的灵敏度或更换相关元件。

四、其他相关问题

  1. 问:门控夜明灯电路适用于哪些场合?
    : 门控夜明灯电路适用于需要自动照明的各种场合,如家庭玄关、走廊、楼梯间等。它能够在人们进门时自动点亮电灯,为人们提供方便,同时也能够节省能源。

  2. 问:如何选择合适的电灯与电路匹配?
    : 在选择电灯与电路匹配时,首先需要考虑电灯的功率和类型。由于门控夜明灯电路通常设计为低功耗电路,因此建议选择功率较小、发光效率较高的电灯,如LED灯泡。此外,还需要确保电灯的电压和电流与电路的输出相匹配,以避免电路损坏或电灯烧毁。

Dell公司的发展小趣事

以下是五个关于Dell公司在电子行业里发展起来的相关故事,每个故事都力求描述事实,避免主观评价:

  1. 大学宿舍里的创业梦想

1984年,一个年仅19岁的年轻人迈克尔·戴尔(Michael Dell)在德克萨斯大学的宿舍里,凭借对电脑行业的热情和敏锐的市场洞察力,用1000美元创立了PC's Limited公司(后更名为戴尔公司)。他通过从当地电脑零售商那里低价购买积压的IBM电脑,然后自行改装升级并以低于市场价的价格出售,迅速打开了市场。这种直接销售模式不仅让戴尔公司赚取了第一桶金,也为他日后在电子行业的发展奠定了坚实的基础。

  1. 股票市场的智慧投资

1987年,戴尔公司在股市暴跌的情况下做出了一个大胆的决策——大量购入高盛的股票。这一决策在当时看来颇具风险,但戴尔凭借过人的胆识和精准的市场判断,成功地在第二年获利1800万美元。同年,戴尔公司在纳斯达克公开上市,融资3000万美元,市场价值达到8500万美元。这一举措不仅让戴尔公司的资金实力得到了极大提升,也为其后续在电子行业的扩张提供了有力支持。

  1. 直销模式的成功实践

戴尔公司自创立之初就坚持直销模式,通过直接与客户沟通了解他们的需求,从而提供更加符合客户需求的产品和服务。这种直销模式不仅减少了中间环节和成本,也让戴尔公司能够更加快速地响应市场变化和客户需求。随着公司规模的不断扩大,戴尔逐渐将直销模式应用到了全球范围内,取得了显著的成功。

  1. 技术创新的持续推动

在电子行业竞争激烈的背景下,戴尔公司始终将技术创新作为推动企业发展的重要动力。公司不断投入大量资金用于研发新技术和新产品,以满足客户不断变化的需求。例如,戴尔公司率先推出了多款具有创新性的电脑产品,如超薄笔记本、游戏本等,这些产品不仅深受消费者喜爱,也为公司带来了可观的利润。

  1. 全球市场的战略布局

随着全球经济的不断发展和电子行业的竞争加剧,戴尔公司逐渐将目光投向了全球市场。公司通过在全球范围内建立生产基地、销售网络和研发中心等方式,实现了对全球市场的全面覆盖。这种全球化战略不仅让戴尔公司能够更好地满足全球客户的需求,也为其在电子行业的竞争中赢得了更大的优势。同时,戴尔公司还积极寻求与全球合作伙伴的合作机会,共同推动电子行业的发展和进步。

AURORA公司的发展小趣事

AURORA公司成立于2016年,初出茅庐便面临着巨大的挑战。然而,公司的三位联合创始人Chris Urmson、J. Andrew Bagnell和Sterling Anderson均来自自动驾驶汽车领域的顶尖团队,拥有丰富的经验和深厚的技术背景。他们凭借对自动驾驶技术的深刻理解和前瞻性眼光,为AURORA的发展奠定了坚实的基础。在初创时期,AURORA通过与多家汽车制造商合作,共同设计和开发传感器、软件和数据服务,逐渐在自动驾驶领域崭露头角。

Galaxy Semi-Conductor Co Ltd公司的发展小趣事

山西飞虹光电科技集团有限公司原以煤炭、洗煤和焦化等生产为主,但在响应山西省委、省政府转型跨越发展的号召下,公司于2010年向高科技产业基地转型。在临汾·甘亭新型工业园区投资16.5亿元建设了“山西陆合飞虹光电科技园”,专注于研发和生产化合物半导体外延片、芯片以及大功率半导体激光器等高科技产品。飞虹光电科技集团通过技术创新,在大功率激光外延片、芯片及LED红、蓝、紫光材料等方面填补了山西省的多项空白,并荣获多项国内外专利及科技奖项。

Actel公司的发展小趣事

飞虹半导体自2002年建厂之初,便意识到大功率半导体产品市场几乎被国外进口产品垄断。为了改变国内电子厂家在价格与交货期上的被动局面,飞虹半导体毅然踏上了大功率半导体国产化生产研发的道路。尽管面临重重困难,但飞虹半导体坚持不懈,逐步在LED驱动、工业开关电源、新能源电动车等多个领域取得突破。其功率器件产品因性能优越,逐渐获得市场认可,为国产半导体替代进口产品贡献了重要力量。

Circuit Assembly公司的发展小趣事

飞虹光电科技集团在转型过程中,相继成立了多家高科技企业,如山西飞虹微纳米光电科技有限公司、山西飞虹半导体照明有限公司等。这些企业之间形成了良好的协同发展机制,共同推进半导体激光器和LED材料的研发与应用。通过产学研一体化模式,飞虹系列企业依托多所高等院校技术平台,不断提升自身研发实力和市场竞争力,为中国电子行业的发展贡献了重要力量。

问答坊 | AI 解惑

北京青云创新科技发展有限公司招聘高级研发工程师

大家好. 北京青云创新科技发展有限公司招聘高级研发工程师,希望符合条件的先生或女士积极投递简历. 岗位职责: 1、承担FPGA液晶驱动板及图形卡的设计及技术更改任务,负责所设计产品技术文件资料的整理归档工作; 2、负责对所设计产品的材料加工 ...…

查看全部问答>

用LPC177打造你自己的CAN网络

CAN 是Controller Area Network 的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。由于这些系统之间通信所用的数据类型及对 ...…

查看全部问答>

安顿双绞线传输器的传输效果对比与示意

在实际工程中,选用何种传输方式需要结合工程的具体情况和工程预算来综合考虑。对于传输距离超过2Km的监控网络,应该考虑选用光纤和光端机。如果传输距离达到数公里或者几十公里,就只有使用光纤了。另外,在一些干扰很强的场合,比如受到工业干扰 ...…

查看全部问答>

cadence问题求助------5!

这个问题非常基础但是有几个地方不是很明白: 在画原理图时,大部分需要自己画芯片,一些主要的芯片,库里面总是没有 在画芯片时,关于芯片引脚习惯上都是定义成什么? 我看芯片引脚有:3 state、Bidirectional 、 Input 、Open Collector &nbs ...…

查看全部问答>

程序在Windows CE运行变慢

有一个程序在window mobile上运行都正常,可是到window ce上运行就很慢,这是什么原因? 程序是用VC来开发的.…

查看全部问答>

有没有带CAN接口的51开发板,谢谢大家

有没有带CAN接口的51开发板,谢谢大家,给我个电话…

查看全部问答>

阿牛哥八月份第二周工作汇报

     8月8日爆发甘肃舟曲特大泥石流灾害牵动全国亿万人民的心。8月15日甘肃舟曲特大泥石流灾害追悼会全球直播,电视,广播,网络,报纸在报道。当阿牛哥看到电视直播舟曲灾区情况, 灾区诞生一个个婴儿的脸孔,抱着一岁弟弟的 ...…

查看全部问答>

有关串口调试助手的困惑

如果我给串口调试助手发送一个字符串“zhangkai”,如果勾上16进制显示,是不是就是串口调试助手把字符串转换为7A 68 61 6E 67 6B 61 69这个了?   在串口调试助手给单片机发数据时,如果选上16进制发送和不选16进制发送有啥区别?发送区填 ...…

查看全部问答>

MSP-EXP430FR5739实验板团购

这次机会真是难得呀,一个字实惠。…

查看全部问答>

MSP430系列的一些另类问题(上)

一般是刚开始入门会遇到的问题: 1、 接上仿真器,发现不能下载,这个问题想必大家都有遇到过,IAR提示找不到目标? 可能的原因:A、 并口驱动能力不足,在电脑的BIOS界面下设置成ECP或者ECP+EPP模式B、 JTAG线太长,一般超过20CM不推荐,而且这个线最好不 ...…

查看全部问答>