0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

分享两个STM32应用中的实战案例

茶话MCU 来源:茶话MCU 2023-01-11 09:13 次阅读

前不久,几乎举国上下在同一时间段内整齐划一地被感染了新冠。

很多人感染后都不同程度地出现味觉、嗅觉失灵的情形。本人也有相同经历。这几天,味觉恢复,嗅觉也在慢慢恢复中。既能闻到诱人的煎饼香,也能闻到清新的花香了。

今天在此分享两个STM32应用中的实战案例,权作提醒,以免重蹈覆辙。

案例1:

系统联机工作时,Flash编程偶发性失败

有人使用STM32F4系列芯片做开发,代码里涉及到FLASH编程。他发现FLASH编程过程中时不时地出现编程错误,即提示HAL_FLASH_ERROR_PGP错误。

他的产品系统有用到CAN通信。当他不将芯片做系统联机工作时不会发生该错误,只有在做整体联机测试时才可能发生编程异常。

起初,客户使用4字节编程模式,平常单独就flash编程功能测试也正常,整体联机运行时才可能出问题。后来,无意中尝试将FLASH单次编程宽度调整为1个字节后则异常消失。

那是为什么呢?

09eb3f0c-9135-11ed-bfe3-dac502259ad0.png

其实,在做FLASH编程时,选择不同的编程宽度所需的芯片供电电压是不一样的。上面截图来自STM32F4系列参考手册。从图中不难看出,选择的编程宽度越宽,芯片所需供电电压越高。

若不运行其它功能,只是单独就芯片做flash编程,功耗需求相对较小、电源波动也小。当联机工作时,系统功耗、串扰都有所增大,电源波动也可能加剧,这时很可能出现电源难以保证支持4字节编程方式的稳定需求。由于单字节编程模式所需电源电压相对较低,在系统联机工作时,相同的电源条件下,即使电源有所波动,但完全可能依旧能提供满足单字节编程的稳定电压需求,因而不会出现因供电问题导致的编程异常。

案例 2:

芯片工作时偶发性出现死机现象

有人在做STM32芯片做产品开发,会偶发性地出现芯片进入死机状态的现象。

代码里有做FLASH编程操作,有UART的收发动作及相关中断,另外还开启了某定时器更新中断。经过测试发现,如果关闭定时器中断,FLASH编程、UART收发动作保持的情况下,则不会出现死机的现象。可是定时器中断怎么会导致芯片死机呢?感觉没有找到根本原因。后来,进一步跟踪调试发现,芯片出现死机,实际上是程序不停地进入UART接收中断。

用户代码里的确使能了UART收发中断,但在中断代码里程序实实在在有对接收非空标志【RXNE】做清零处理,不应该没完没了地进接收中断啊!经进一步确认,发生死机现象时总是对应着UART接收溢出事件【ORE】。哦,如果这样,当UART接收发生溢出时的确也会产生接收非空中断。下图为STM32USART的各个中断请求事件及中断使能控制位。从下图可以看出,当使能RXNEIE时,RXNE和ORE事件都可产生接收中断。

09fab90a-9135-11ed-bfe3-dac502259ad0.png

用户虽然在UART接收中断里有对RXNE标志清零,但当发生溢出事件而进入中断时,他并没有对ORE标志做检测及相应的清零操作。

0a0b927a-9135-11ed-bfe3-dac502259ad0.png

实际上,用户根本就没有意识到发生ORE事件时也可以产生接收中断,在其代码里根本没有对ORE标志进行检测,更没有对ORE标志做清零,导致UART接收中断没完没了的进入,感觉芯片犹如死机一般。

为什么关闭定时器中断能防止死机现象发生呢? 我们知道,UART接收产生溢出是因为数据接收到后不能及时取走才产生的,而定时器中断的存在,因为中断竞争的原因导致了UART接收中断的及时性受到影响,进而容易发生溢出。如果关闭定时器中断或或将UART接收中断的优先级配置成可以抢占定时器中断就可以避免UART接收不及时的问题,也就不会发生溢出。这样的话,即使用户的UART接收中断里没有对ORE事件的处理也无所谓。

当然,我们做UART的中断接收时,中断代码里最好加上对ORE事件的检测处理,当发生溢出事件时,及时对ORE事件标志清零。否则,万一发生溢出,就可能因ORE事件而发生没完没了进中断的问题,进而导致功能异常。

具体到本案例,再顺便提醒一点,除非片内FLASH采用双BANK结构,FLASH编程也是会影响中断响应的。即该操作也可能让UART的接收中断的响应因临时堵塞而发生接收溢出。

好,今天的分享到此打住。也愿这里的分享能给有需要的人带来一些帮助。

目前尚是冬季,大家注意防寒保暖并保证休息,以利新冠康复。如有咳嗽,除了使用适当药剂外,尽量避免说话,尤其是高声说话。

待到山花烂漫、绿柳如烟时,魑魅魍魉尽遁去。九州华夏重抖擞,东方旭日耀寰宇。~~~~~~一起加油!~~~~~

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FlaSh
    +关注

    关注

    10

    文章

    1549

    浏览量

    146632
  • STM32
    +关注

    关注

    2239

    文章

    10669

    浏览量

    348687
  • 编程
    +关注

    关注

    88

    文章

    3439

    浏览量

    92369
  • 定时器
    +关注

    关注

    23

    文章

    3146

    浏览量

    112023

原文标题:又能闻花香了

文章出处:【微信号:stmcu832,微信公众号:茶话MCU】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32MP157两个A7核能跑两个系统吗?

    请问STM32MP157的两个A7核,能像其它双核CPU一样运行AMP模式:一核跑Linux、一核跑RTOS(或禅机)吗?虽然有一M4
    发表于 03-21 06:50

    stm32怎么与两个液晶相连

    stm32怎么与两个液晶相连
    发表于 03-15 09:02

    怎么进行两个stm32之间的通讯?

    求大神我拿两个32rxtx反接发送的板子我只写了USART_SendData(USART1,1);接受的板子我写了data=USART_ReceiveData(USART1);printf("%c",data);不行求大神教教我如何实现
    发表于 08-15 16:53

    请问怎么用两个STM32F103各自驱动一ESP8266,进行两个STM32之间的通信?

    各位大神,我想用两个STM32F103各自驱动一ESP8266,进行两个STM32之间的通信,可目前没有什么思路和资料,求各位帮助!
    发表于 04-30 00:55

    STM32两个优先级

    STM32两个优先级Preemption Priority(抢占优先级)SubPriority(子优先级)1、抢占优先级:顾名思义能够抢先执行任务,即打断当前的主程序或者中断程序的运行,前去完成
    发表于 08-13 07:11

    STM32有哪两个优先级的概念

    STM32两个优先级的概念:抢占式优先级和响应优先级(也叫副优先级)。他们的特性是:1:高抢占式优先级的中断可以嵌套在低抢占式优先级的中断:,即低抢占式优先级的中断可以被高抢占式
    发表于 08-13 08:42

    STM32F103的两个串口简要分析

    一.STM32F103有两个串口图中 TXD/RXD 是相对 CH340G 来说的,也就是 USB 串口的发送和接收引脚。而 USART1_RX 和 USART1_TX 则是相对于
    发表于 01-14 07:37

    STM32F767.svd文件忘记的两个定义是什么

    两个被遗忘的定义是:RCC_APB1ENR 寄存器的字段 CAN3EN;RCC_APB1RSTR 寄存器的 CAN3RST 字段。
    发表于 12-07 08:57

    如何将两个SDRAM IC连接到STM32F7?

    数量……),我怎么可能将两个 IC 连接到同一 STM32?我需要加倍层数吗?我可以在每条迹线创建一拆分(连接)吗?最好的策略是什么?
    发表于 02-01 07:53

    如何在两个程序交换变量值?

    的扇区 0 上运行。)作为参考,我使用 STM32CubeIDE 1.3.0 作为编译工具。以前用IAR的时候,程序两个变量放在noinit区的同一地址,把编译工具改成
    发表于 02-08 08:38

    两个程序的软件延时部分相同,但两个程序使LED的闪烁间隔时间不同是何原因?

    ADS1.2 编译以下程序进入 AXD 调试成功.问题:两个程序的软件延时部分相同,但两个程序使 LED 的闪烁间隔时间不同,不知是何原因
    发表于 04-19 10:09

    ARM微控制器基础与实战两个问题求解?

    1.《ARM微控制器基础与实战》上说 32 字节的向量表的累加和必须为 0 才可脱机运行, 是否需要每次修改程序后修改第六保留向量的值(因为地址有改变).2.《ARM 微控制器基础与实战》上说用
    发表于 04-19 10:12

    STM32实战 2 | STM32CubeMX及HAL库点亮LED

    STM32实战 2 | STM32CubeMX及HAL库点亮LED
    发表于 12-08 12:36 34次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>实战</b> 2 | <b class='flag-5'>STM32</b>CubeMX及HAL库点亮LED

    STM32电机控制应用实战分享

    电子发烧友网站提供《STM32电机控制应用实战分享.pdf》资料免费下载
    发表于 07-31 15:04 14次下载
    <b class='flag-5'>STM32</b>电机控制应用<b class='flag-5'>实战</b>分享

    STM32库开发实战指南

    STM32库开发实战指南-刘火良,电子 epub格式,清晰非扫描
    发表于 10-27 16:25 9次下载