当前位置:首页 > STM32
  • 意法半导体助力利尔达科技开发无线解决方案低功耗蓝牙模块

    2021年6月18日,中国 – 服务多重电子应用领域的全球半导体领导者意法半导体宣布,利尔达科技集团股份有限公司的新低功耗蓝牙模块采用意法半导体的STM32WB55* Bluetooth® LE (BLE)微控制器(MCU)。利尔达科技是国内一家提供物联网系统和智能产品解决方案的高科技企业。 利尔达的LSD1BT-STWB5500蓝牙模块采用邮票孔封装,高集成度且抗干扰能力强,已通过Bluetooth LE蓝牙低能耗认证,可让客户更好地管理产品上市时间。模块内部的STM32WB MCU支持多种协议(包括BLE 5.2、Zigbee 3.0和Thread),具有多协议动态或静态共存模式。 利尔达ST业务部总经理Alex Yu 表示:“在当今的智能家电、智能工业、智能消费电子、物联网等行业中,对支持多种无线协议的MCU的需求日益增长。作为ST授权合作伙伴,利尔达在ST最新的STM32WB55 MCU平台上开发了新的低功耗蓝牙模块。为了最大程度地发挥其高集成度、高性能、低功耗等特点,该模块支持多种无线协议和指纹识别算法,并支持客户二次开发。出色的RF性能可帮助客户大大缩短设计周期。” 意法半导体亚太区副总裁兼MDG市场应用部、IoT/AI技术创新中心和数字市场部负责人Arnaud Julienne表示:“蓝牙等2.4GHz协议要求开发者具备软硬件专业知识。因为可以克服设计的复杂性,降低产品认证工作量和成本,模块正成为企业开发无线产品、加快上市时间的关键要素。因此,与利尔达此次合作有助于ST在无线领域更好地服务客户,方便他们使用STM32产品和生态系统。” 利尔达的LSD1BT-STWB5500低功耗蓝牙模块现开始提供样品,2021年6月开始量产。 详细技术信息 LSD1BT-STWB5500蓝牙模块还有下列优点,可简化用户设计,提高安全性和可靠性; · 高性能32M和32.768K晶振 · 1 MB闪存/ 256 KB RAM · 64MHzArm®Cortex®-M4和32MHz Cortex-M0 +双核超低功耗MCU · 44个GPIO端口,支持扩展系统 · 集成巴伦,简化射频硬件设计、开发和生产 · 22x19mm封装,节省空间

    时间:2021-06-18 关键词: 意法半导体 蓝牙 STM32

  • 意法半导体更新STM32Cube软件包,可支持IOTA Chrysalis版本

    中国 ,2021年6月9日–意法半导体宣布新版X-CUBE-IOTA1扩展软件包的开发验证已经完成,并已开放下载,以配合IOTA Foundation的分布式账本技术(DLT)和基础设施升级到Chrysalis版本。新的扩展软件包,包括集成的IOTA C 软件库,都已加入STM32Cube微控制器软件开发生态系统。 STM32Cube将底层软件和中间件整合成一个软件库,还集成一个生成初始化代码的微控制器配置工具,让嵌入式应用能够运行在人气很高的STM32系列的任何一款微控制器上。STM32Cube软件有100多个扩展包,包括更新的X-CUBE-IOTA1,是一个容许其他用例专用软件加入的、不断扩大的开发资源生态圈。 新扩展包含有IOTA专用中间件和示例代码,开发人员可利用IOTA DLT最新升级的Chrysalis系统,通过高能效和高功能集成度的STM32 MCU开发智能互联的交易处理设备。 IOTA DLT技术又称Tangle,是一种防止数据篡改的分布式安全数据库。据IOTA Foundation介绍,Chrysalis新升级协议比IOTA最初的协议提高能效60%。为了实现这些好处,IOTA Foundation将协议升级到原子交易,与需要更新整个帐户余额的“帐户交易模式”相比,原子交易能够更高效地记录状态变化。原子交易将最小交易数据量从原始的3500字节降至275字节。改进的新交易选择算法还可以让交易验证和同步变得更快。IOTA Foundation表示,1笔比特币交易所用电能可让IOTO系统执行6亿笔交易。 最新版的X-CUBE-IOTA1软件支持物联网节点评估板B-L4S5I-IOT01A开发套件,该套件搭载STM32L4 + 微控制器,通过Wi-Fi接口连接互联网。新升级软件包依靠STM32 Cryptolib提供高度优化且强大的安全算法,其中包括: ● 中间件库: - IOTA Client API,用于应用与Tangle数据库交互 - STM32加密库,用于加密、哈希转换、消息认证和数字签名 - 传输层安全性 (MbedTLS) - FreeRTOS - Wi-Fi管理 ● 可访问板上运动和环境传感器的完整驱动程序

    时间:2021-06-09 关键词: DLT 意法半导体 STM32

  • 2021年STM32中国峰会圆满落幕,期待明年精彩继续!

    伴随着蝶粉们的欢声笑语,第五届STM32中国峰会暨粉丝狂欢节于4月29日下午在深圳精彩收官。 作为国内最重量级的MCU行业盛宴,本届峰会为期两天,以“芯”生态,“助”安全,“连”未来为主题,通过高端主题论坛、分论坛及技术研讨会、前沿技术展示、粉丝狂欢节等活动,为广大蝶粉带来了一场别开生面的盛会。 (峰会还未开始,就有不少蝶粉早早来到了会场) 下面,就带大家回顾一下本届峰会的精彩盛况! 行业大咖齐聚一堂 首先,在4月28日上午的开幕演讲中,意法半导体副总裁、中国区总经理曹志平发表了致辞。 他表示,尽管这两年受到新冠疫情等多重因素的影响,目前整个MCU产业链都面临着巨大挑战,但意法半导体在中国市场的业务发展非常健康。未来,我们将全力推动产品线的发展,并着力解决制约行业发展的瓶颈问题,希望帮助大家开发出更多有创新、有突破,且效率更高、安全性更好、用户体验更棒的产品和解决方案。 (意法半导体副总裁、中国区总经理曹志平发表致辞) 随后,意法半导体总裁兼首席执行官Jean-Marc Chery、意法半导体亚太区市场营销执行副总裁Jerome Roux、意法半导体中国区微控制器市场与应用总监曹锦东、意法半导体亚太区微控制器技术市场经理何荻凡、意法半导体亚太区MEMS产品高级市场经理许永刚等五位演讲嘉宾,就STM32的技术创新与应用发展做了分析和展望。 (五位演讲嘉宾轮番登场) 当天下午,本届峰会还围绕工业与安全、人工智能与传感技术、云接入与连接、生态与创新四大应用方向,同时举办了四场分论坛。 在此期间,意法半导体与广和通、中移物联网、安谋中国、艾睿电子等多家IoT生态合作伙伴齐聚一堂,从各自擅长的领域发表了精彩演讲。 (分论坛现场) 成果展示亮点纷呈 为了突出专业和技术特色,本届峰会除了设有主论坛、分论坛之外,还在第二天举办了技术研讨会,旨在搭建一个技术交流平台,为嵌入式开发者提供更多的学习机会。 与会嘉宾围绕后疫情时代的“物联网、人工智能、传感技术”等话题展开了深入交流,并在探讨与沟通中分享了彼此的技术和经验,希望借助这一交流平台,让大家进一步了解到ST解决方案的作用与价值。 (技术研讨会现场) 此外,在峰会期间,意法半导体还为广大蝶粉带来了100多项前沿技术和应用演示,全方位展示了基于STM32创新的嵌入式解决方案以及各类终端产品,包括一系列基于STM32 MCU和MPU的工业和安全应用开发套件和客户产品、基于STM32G0和STM32H7的GUI图形化显示方案和各种终端应用,以及全新的STM32U5超低功耗系列MCU等,以便让大家充分地了解到意法半导体为工业、电源管理、传感器、成像等应用开发的技术和产品。 而在众多的展品中,意法半导体则重点介绍了其基于STM32WL和STM32WB的低功耗、长距离/短距离无线通信解决方案。意法半导体的STM32系统芯片(SoC)将MCU和无线通信模块LoRa与BLE5.0/Zigbee3.0集成,使客户能够轻松地在单个芯片上实现控制和无线双重功能。 与此同时,意法半导体还展示了基于全球首款LoRa单片微控制器STM32WL的智能家居演示模型。该演示通过STM32WL的LoRa远程通信技术,将智能家居传感器(如门磁传感器,温湿度传感器,烟雾传感器)连接在一起,实现了智能家居的整体控制。 (技术展厅人潮涌动) 从展厅的火爆人气和观众的积极参与可以看出,STM32生态系统正在被更多的嵌入式开发者认可,其在中国市场的影响力也在不断提高。 特色活动精彩绽放 在4月29日的STM32峰会粉丝狂欢节上,意法半导体还为大家带来了密室逃脱、趣味游戏等节目,并准备了千份好礼以待各位蝶粉。 (参展者参与游戏互动) 值得一提的是,本届峰会还首次推出了24小时挑战赛——Hackathon(黑客松),旨在通过现场比拼、全程直播的方式,让参赛选手在感受竞技乐趣的同时,还能激发和开拓嵌入式开发者的设计灵感与思路,进一步增强STM32生态系统在中国的影响力。 据悉,本次大赛围绕参赛选手如何使用ST产品开发项目展开,针对“GUI应用、高性能应用、人工智能、无线(LoRA、蓝牙)、传感应用、安全、马达驱动、无线模组、STM32生态系统”十大相关功能的实现。 为了帮助参赛团队做好赛前准备,意法半导体不仅向参赛选手提供了开发板和技术文档,还派出了专家团队为大家随时解答问题。 (黑客松比赛现场) 历经五年的不懈努力,STM32峰会已为数千名嵌入式开发者持续呈现了前沿的技术和创新,并成为了MCU业界备受瞩目的大型年度重要峰会。 虽然本届峰会已经圆满落幕,但对于STM32生态系统的发展来说,这也意味着一段新的征程即将开始。相信在意法半导体及全球合作伙伴的齐心协力奋斗之下,明年的STM32必定再迎辉煌! 最后,让我们期待2022年STM32中国峰会精彩继续!

    时间:2021-04-30 关键词: 嵌入式 意法半导体 STM32

  • STM32中国峰会暨粉丝狂欢节2021重磅回归!

    2021年,STM32中国峰会重新回归!以“芯”生态、“助”安全、“连”未来”为主题,第五届STM32中国峰会暨粉丝狂欢节于4月28-29日在深圳如期举行。本次峰会,意法半导体携手35个合作伙伴,展示200多个方案演示,带来54场技术专题会议及研讨会,并首次举办24小时Hackathon挑战赛。2020年,由于全球疫情,STM32中国峰会未能如期举办。2021年,我们再次相聚深圳!我们还增加了峰会现场网络直播,以方便全球观众观看峰会,并迎合不同观众的兴趣,提供演示活动视频点播。 本次峰会围绕4大应用方向展开:工业与安全、人工智能与传感技术、云接入与连接、生态与创新。每个主题下都有相关演讲、实战培训、应用演示等活动。2021年STM32中国峰会涉及广泛的内容,保证参观者能够深入钻研某一个特定领域,汲取大量的专业知识,亲身试用各种应用演示,收获满满。 24小时Hackathon挑战赛:业内首档嵌入式工程师真人秀 本次峰会首次举办24小时Hackathon挑战赛,是业内首档嵌入式工程师真人秀,见证蓝蝴蝶粉封神路。 Hackathon挑战赛共吸引50多个团队报名参赛,ST从中筛选出20个团队参加入围预赛,最后再评选出10个团队参加线下现场决赛。本次为开放赛题,大赛围绕参赛选手如何使用ST产品开发项目展开,针对以下10大相关功能的实现:GUI应用、高性能应用、人工智能、无线(LoRA,蓝牙)、传感应用、安全、马达驱动、无线模组、STM32生态系统。 (10组黑客松参赛队) 从4月28日中午开始,参赛选手有24个小时的时间编写开发进度文档和创建应用系统。评分权重分别是网上投票20%、现场观众投票20%、ST和外部专家组成的7名评委投票60%。现场评比标准包括项目完成情况、设计总体复杂程度、ST工具使用情况,以及项目的实用性、创造性和独创性。我们对Hackathon挑战赛进行了全程直播,同时还在ST微信微盟、ST MCU中国网站和合作媒体网站上对大赛进行直播。 (7位评审大咖) 为了帮助参赛团队做好赛前准备,ST在Hackathon挑战赛前一个月给他们寄去了五块不同的开发板,分别是STM32H745I-DISCO、NUCLEO-WL55JC、P-NUCLEO-WB55、SensorTile.box和NB-IoT Sensor Shield。 此外,ST还向参赛选手提供技术文档,工程师随时解答他们的问题。通过不拘一格的指导和协助,把激烈比赛的擂台变成一个择机施教的课堂,让参赛选手能够立即获得建议,迅速改正问题。 (工程师随时解答选手的问题) 精选方案展示:分分钟抢占下一个技术风口 从为期两天的峰会上展出的全部应用演示中,我们挑出几个独具特色的、可以展示新的行业发展趋势的热门解决方案进行重点介绍: 由中国企业Seeed带来的智能农业应用方案,该系统通过ST的LoRaWAN模块发送有关土壤湿度和健康状况的信息,对有需要的土壤进行针对性地照料,大幅提高耕种作业效率。 另一家国内合作伙伴Sungrow带来的光伏逆变器和光伏板。该演示装置由太阳能逆变器和光伏板组成,将太阳能转换为电能,让世界变得更清洁、更绿色、更美好。Sungrow的产品已部署在150个国家/地区,为太阳能大规模普及做出了贡献。这表明,在全社会为改善环境作出的共同努力下,电力元器件可以发挥积极的作用。 意法半导体还展示一个能够记录踢球次数的双人赛训练用足球。如今,在体育运动中使用传感器的情况越来越普遍,工程师也更加关心如何利用嵌入式系统,来帮助职业选手提高训练效果。现场参观者可以现场体会一把“智慧踢球”的乐趣。该演示将足球悬挂在天花板上,并将传感器设置在绳子上。当有人踢球时,惯性MEMS传感器将记录运动,并捕获速度/加速度数据,还可以统计一个时间段内的踢球次数。同时球内的STM32WB MCU将通过蓝牙BLE向手机发送实时数据。该应用演示可用作概念验证原型,通过开发一个类似系统并不断加以改进,工程师可以帮助运动员改善踢球姿势,提高踢球动作的正确率。 最酷的粉丝狂欢节 憋了一年之余的STM32粉丝们,大型线下面基奔现活动——STM32粉丝狂欢节开始了! 峰会第二天,STM32粉丝狂欢节开放了诸多脑洞大开的游戏、提供了丰富多样的奖品,让观众在有趣有料的互动活动中体验STM32的魅力。 畅游STM32中国峰会暨粉丝嘉年华的娱乐七重奏包括①STM32MP1知识闯关赛②谁是大富翁③拉弓射盲盒④蝴蝶球搬运工⑤“格斗霸王”PK赛,重拾童年回忆⑥我“擦”:看谁是王者蝴蝶粉⑦社区锦鲤等着你。 参与“密室逃脱“来燃烧脑细胞,“疯狂跳一跳”比拼耐力,“颠足球挑战”释放多巴胺……现场还有多重好礼,与STM32一起加倍欢乐! 有干货、有颜值、有福利……这届有新意的STM32峰会令人酣畅淋漓、意犹未尽。让我们共同相约,期待来年再相聚!

    时间:2021-04-30 关键词: STM32中国峰会 Hackathon挑战赛 STM32

  • 开启智能“芯”时代,2021年STM32中国峰会盛大开幕!

    在这春意盎然的日子里,意法半导体STM32如期而至的又与广大蝶粉见面了! 2021年4月28-29日,最in最热的第五届STM32中国峰会暨粉丝狂欢节在深圳华侨城洲际大酒店隆重举办。本届峰会以《“芯”生态,“助”安全,“连”未来》为主题,围绕“工业与安全、人工智能与传感技术、云接入与连接、生态与创新”四大应用方向,为广大蝶粉带来了面向未来的新产品与新技术;同时,本届峰会还汇集了众多全球合作伙伴,全方位展示了基于STM32创新的嵌入式解决方案以及各类终端产品。 作为备受瞩目的MCU业界年度盛会,今年意法半导体重磅加码了中国区产品应用与技术更新,通过50余场尖端技术研讨会、100多项前沿技术和应用演示,向大家呈现了最尖端高能的创新技术和最贴近用户的生态落地。与以往不同的是,本届峰会同期还首次举办了Hackathon 24小时挑战赛,旨在激发和开拓嵌入式开发者的设计灵感与思路,进一步增强STM32生态系统在中国的影响力。 (2021年STM32中国峰会在深圳开幕) 意法半导体副总裁、中国区总经理曹志平出席了开幕式,并在致辞中表示,尽管这两年受到新冠疫情等多重因素的影响,目前整个MCU产业链都面临着巨大挑战,但意法半导体在中国市场的业务发展非常健康。未来,我们将全力推动产品线的发展,并着力解决制约行业发展的瓶颈问题,希望帮助大家开发出更多有创新、有突破,且效率更高、安全性更好、用户体验更棒的产品和解决方案。 (意法半导体副总裁、中国区总经理曹志平) 意法半导体总裁兼首席执行官Jean-Marc Chery从市场的角度,分享了自己对企业价值的看法。他表示,我们的科技源于提前布局长期战略性市场,尽管这两年出现了例如疫情等特殊情况,但我们的战略基本原则并没有发生改变。未来,我们仍将继续加强服务市场的能力,为客户和合作伙伴提供一流的产品与高效的服务。 (意法半导体总裁兼首席执行官Jean-Marc Chery) 意法半导体亚太区市场营销执行副总裁Jerome Roux围绕“目标市场及终端市场战略”的话题进行了精彩发言,从市场变化、战略调整等方向,详细介绍了意法半导体在物联网和智能驾驶等领域所面临的机遇与挑战。他认为,5G市场将在明年迎来爆发式增长,这将为STM32的发展带来更多商机。 (意法半导体亚太区市场营销执行副总裁Jerome Roux) 意法半导体中国区微控制器市场与应用总监曹锦东发表了题为《STM32产品路线,激发你的创造力》的主旨演讲,向与会的2000多位嘉宾介绍了STM32产品路线。他表示,意法半导体承诺持续加强STM32产品和生态的开发,让客户实现更多的创新嵌入式应用。“我们很荣幸携手35个合作伙伴,和众多客户相聚在第五届STM32峰会,展现最前沿的技术和方案,帮助用户加快开发出更安全、更多连接功能的应用,携手建设一个更美好的世界。” (意法半导体中国区微控制器市场与应用总监曹锦东) 意法半导体亚太区微控制器技术市场经理何荻凡从生态系统的角度,介绍了智能传感器给STM32带来的创新与变革。他表示,意法半导体拥有一个庞大且丰富的STM32生态系统,可以提供控制器与功率系统相关的软硬件平台。目前,意法半导体已在全球布局了相关行业的应用专家,可以直接帮助客户提供参考设计,一体化的软硬件工具,甚至是原型设计。 (意法半导体亚太区微控制器技术市场经理何荻凡) 意法半导体亚太区MEMS产品高级市场经理许永刚则做了题为《传感器连接世界》的主题演讲,分享了ST传感器在消费电子领域的发展现状和应用成果。他表示,意法半导体作为传感器的主力供应商,将不断通过技术革新的方式赋能消费电子、汽车电子等领域,未来ST传感器发展将大有可为。 (意法半导体亚太区MEMS产品高级市场经理许永刚) 随后,在专题讨论环节,豆荚科技(Beanpod)、国迅芯微(NIIC)、中移物联网(OneOS)、纵行科技(ZiFiSense)、意法半导体(ST)等企业代表,围绕“物联网、嵌入式、人工智能”等关键词进行了深入探讨。他们一致认为,AIoT与嵌入式是密不可分的,物联网和人工智能的发展对于嵌入式开发具有一定的促进作用。作为支撑AIoT发展的重要基石,未来嵌入式技术必将迎来更多的发展机会。 (专题讨论活动现场) 最后需要指出的是,意法半导体STM32的发展与成功不是一蹴而就的,而是靠众多全球合作伙伴长期以来的支持与努力积累而成的。可以说,如果没有他们就没有STM32今天的辉煌。为此,本届峰会还举行了STM32(中国)战略合作伙伴授牌仪式,以表彰他们为STM32生态系统作出的持续贡献。 (颁奖现场) 据悉,在为期两天的峰会上,意法半导体携手多家IoT生态合作伙伴共同展出了200多个原型设计,包括基于市场领先的STM32 *微控制器(MCU)和微处理器(MPU)等最新技术创新成果。 与此同时,本届峰会也为参展者提供了一个绝佳的平台,通过应用演示基于超低功耗STM32U5 IoT Kit的安全监控摄像头、STM32H7伺服控制器,以及基于TouchGFX(或RT-thread)的智能穿戴等解决方案,让大家充分地了解到意法半导体为工业、电源管理、传感器、成像等应用开发的技术和产品。 (ST新产品吸引了众多参展者体验互动) 到目前为止,意法半导体STM32峰会已经在中国走过了五个年头。每年4月底,STM32都会在深圳这个电子行业前沿阵地掀起一场面向嵌入式开发者的“蝴蝶效应”。对于广大蝶粉而言,STM32峰会就像是一个大舞台,只要你足够精彩,就一定可以舞出自己! 看到这里,你是不是心动了呢?峰会第二天(4月29日)还有免费的NUCLEO开发板可以领取,欢迎大家莅临2021年STM32中国峰会现场,亲身体验意法半导体和客户开发的这些创新演示。

    时间:2021-04-28 关键词: 嵌入式 意法半导体 STM32

  • STM32属于哈佛结构还是冯诺依曼结构?

    现代的CPU基本上归为冯诺伊曼结构(也成普林斯顿结构)和哈佛结构。 冯洛伊曼结构就是我们所说的X86架构,而哈佛结构就是ARM架构。一个广泛用于桌面端(台式/笔记本/服务器/工作站等),一个雄踞移动领域,我们的手持设备(平板\手机用的大多就是他了)。 0 1 冯·诺依曼体系 冯·诺依曼体系的特点: A、数据与指令都存储在同一存储区中,取指令与取数据利用同一数据总线。 B、被早期大多数计算机所采用。 C、ARM7——冯诺依曼体系结构简单,但速度较慢。取指不能同时取数据 冯 · 诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同,如英特尔公司的 8086 中央处理器的程序指令和数据都是 16 位宽。 冯.诺依曼结构处理器具有以下几个特点: 1:必须有一个存储器; 2:必须有一个控制器; 3:必须有一个运算器,用于完成算术运算和逻辑运算; 4:必须有输入设备和输出设备,用于进行人机通信。另外,程序和数据统一存储并在程序控制下自动工作。 冯·诺依曼 结构 : 英特尔公司的8086。 英特尔公司的其他中央处理器。 ARM的ARM7。 MIPS公司的MIPS处理器。 0 2 哈佛体系 结构特点: A、程序存储器与数据存储器分开. B、提供了较大的存储器带宽,各自有自己的总线。 C、适合于数字信号处理. D、大多数DSP都是哈佛结构. E、ARM9是哈佛结构,取指和取数在同一周期进行,提高速度,改进哈佛体系结构分成三个存储区:程序、数据、程序和数据共用。 哈佛结构是一种存储器并行体系结构,主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个独立的存储器,每个存储器独立编址、独立访问。程序指令存储和数据存储分开,可以使指令和数据有不同的数据宽度。 哈佛结构能基本上解决取指和取数的冲突问题.而对另一个操作数的访问,就只能采用Enhanced哈佛结构了,例如像TI那样,数据区再split,并多一组总线.或向AD那样,采用指令cache,指令区可存放一部分数据.。 哈佛结构: 1、ARM(除arm7) 2、大部分DSP 哈佛体系架构有个致命的弱点在动态加载程序上面,想象我们从外存中读取一段程序然后加载到RAM,这个程序是在数据内存当中的,我们需要一种机制将数据内存再传输到程序内存当中去,这反而增加了设备复杂度。 对于多任务操作系统来说,管理程序内存是一件非常重要的事情,而且仅仅是保护模式下的页面映射等等机制就已经足够复杂了,如果还要求将程序和数据分开管理,复杂度就太高了。这种时候冯诺依曼体系结构就有非常大的优势了。 0 3 arm和哈佛、冯·诺依曼的关系 哈佛架构是针对cpu从cache中取指而言,指令和数据在主存中并未分开,但在加载到cache中的时候被分离为指令和数据两份存储空间,cpu可以同时从cache取到指令和数据. 所以arm系统CPU(除arm7)对外表现为冯.诺伊曼架构,对内则表现为哈佛架构。 0 4 实际芯片制造 实际上,绝大多数现代计算机使用的是所谓的“ModifiedHarvard Architecture”,指令和数据共享同一个address space,但缓存是分开的。可以说是两种架构的一种折中吧。 在现实世界中很少有非常纯粹的概念,特别是在实际的应用里。教科书里的大多是理想化的模型,便于掌握某个概念的重点和本质,但实际中很难达到这种理想化的状态。 哈佛结构和冯诺依曼结构主要区别在是否区分指令与数据。在教科书里这是两种截然不同的做法。 但实际上在内存里,指令和数据是在一起的。而在CPU内的缓存中,还是会区分指令缓存和数据缓存,最终执行的时候,指令和数据是从两个不同的地方出来的。你可以理解为在CPU外部,采用的是冯诺依曼模型,而在CPU内部用的是哈佛结构。 大部分的DSP都没有缓存,因而直接就是哈佛结构。 哈佛结构设计复杂,但效率高。冯诺依曼结构则比较简单,但也比较慢。CPU厂商为了提高处理速度,在CPU内增加了高速缓存。也基于同样的目的,区分了指令缓存和数据缓存。有时为了解决现实问题,究竟是什么主义真的没那么重要。因而个人认为争论到底是哪种结构意义不大。

    时间:2021-04-28 关键词: 哈佛结构 冯诺依曼结构 STM32

  • 2021年STM32中国峰会在深圳举行,意法半导体携合作伙伴展示创新成果

    · 以"芯”生态、“助”安全、“连”未来为主题,2021年STM32峰会聚焦工业与安全、人工智能与传感技术、云接入与连接、生态与创新 · 在为期两天的线下/线上展会及分会场中,意法半导体与35个合作伙伴将带来200多个方案演示和55场技术研讨会 2021年4月27日,中国深圳——服务多重电子应用领域的全球半导体领导者意法半导体(STMicroelectronics,简称ST) 将于4月28-29日在深圳华侨城洲际大酒店举行2021年STM32中国峰会。 作为备受瞩目的业界年度盛会,第五届STM32峰会即将拉开帷幕。届时, 意法半导体及多家IoT生态合作伙伴将齐聚一堂,展示基于市场领先的STM32 *微控制器(MCU)和微处理器(MPU)的最新技术创新成果。同时,STM32峰会也为参展者提供了一个绝佳的平台,能够充分了解和研究意法半导体为工业、电源管理、传感器、成像等应用开发的广泛的产品和解决方案。 意法半导体中国区微控制器市场及应用总监曹锦东表示: “意法半导体承诺持续加强STM32产品和生态的开发,让客户实现更多创新嵌入式应用。我们很荣幸携手35个合作伙伴,和众多客户相聚在第五届STM32峰会,展现最前沿的技术和方案,帮助用户加快开发出更安全、更多连接功能的应用,携手建设一个更美好的世界。” 本次峰会为期两天,围绕4大应用方向展开:工业与安全、人工智能与传感技术、云接入与连接、生态与创新。 工业与安全 意法半导体将展示一系列基于STM32 MCU和MPU的工业和安全应用开发套件和客户产品。 其中,STM32G4和STM32H7具有高时钟频率和丰富的模拟和数字外设,被工业客户广泛应用在电机控制、LED屏幕显示控制和机器人控制等诸多工业场景。而STM32MP1双核MPU以丰富而强大的功能受到工业客户的广泛认可。此外,STM32全系列可以满足大多数工业的安全要求,如,STM32L5和下一代低功耗无线产品具有强大的软硬件安全资源,以保障用户的资产安全。 在峰会上,意法半导体将展示由禾川带来的总线型机器人运动控制器。该演示基于STM32MP1 双核微处理器开发,将展示如何对机器人执行多轴控制。STM32MP1系列微处理器采用异构体系架构,搭载Arm®Cortex®-A7和Cortex-M4两个内核,其中Cortex-A7用于管理通信,Cortex-M4用于实时控制。借助这样的“超级大脑”,STM32MP1改善了系统的整体运行性能和实时性能,从而使机器人的指令响应更快,行为更智能。 届时活动现场还会展出其他意法半导体工业与安全应用演示,包括::有安全功能的低功耗STM32L5-DK人工智能(AI)演示、基于超低功耗STM32U5 IoT Kit的安全监控摄像头、STM32H7伺服控制器,以及基于于STM32G4以及三相半桥栅极驱动器STDRIVE101, STripFET F7系列低压MOSFET的STL110N10F7双电机位置控制解决方案。 人工智能与传感技术 意法半导体将带来基于STM32G0和STM32H7的GUI图形化显示方案和各种终端应用,满足从可穿戴到工业、从低成本到高端市场的不同需求。 如,高分辨率STM32H725显示模块通过TouchGFX软件显示3D效果、播放视频和一些高级的动画效果,可以在任何应用设备上实现可以媲美智能手机触屏的使用体验。 展出的其他人工智能和感知应用演示包括:在STM32L4R9上运行的基于TouchGFX (或RT-thread) 的穿戴演示、在STM32G030上开发的手持式吸尘器、ST下一代智能手表演示模型,以及水深检测仪等。 云接入与连接 意法半导体将重点介绍其基于STM32WL和STM32WB的低功耗、长距离/短距离无线通信解决方案。意法半导体的STM32系统芯片(SoC) 将MCU和无线通信模块LoRa和BLE5.0/Zigbee3.0集成,使客户能够轻松地在单个芯片上实现控制和无线双重功能。 意法半导体将展示基于全球首款LoRa单片微控制器STM32WL的智能家居演示模型。该演示通过STM32WL的LoRa远程通信技术,将智能家居传感器比如门磁传感器,温湿度传感器,烟雾传感器连接一起,实现智能家居的整体控制。 为了展示针对云服务和通信连接应用开发的广泛产品组合,意法半导体还将展示基于STM32WB的智能指纹锁、纵行科技的基于STM32WL的ZETA MOTE双模路由、采用NFC技术实现快速蓝牙配对的SoundBar,以及采用ST60毫米波非接触连接技术的360C半双工全景旋转摄像头。 生态与创新 本次峰会,ST将带来全新的STM32U5超低功耗系列MCU,能提供更多的智能、更高的集成度和更全面的安全保护,帮助客户开发要求更高的应用。同时,作为STM32 MCU和MPU的完整软件解决方案,STM32Cube生态系统预集成Microsoft®Azure RTOS,能为客户提供更多操作系统选择。 在峰会上,意法半导体将展示用STM32U5 IoT Discovery Kit套件(B-U585I-IOT02A)开发的各种演示。该开发套件集成了STM32U5 MCU、Wi-Fi®模块、Bluetooth®模块和各种传感器,已被多个合作伙伴选为参考设计平台,如,微软已指定该套件为其新的Azure认证设备计划(Azure Certified Device program)参考板。 除了Azure RTOS和Azure Cloud解决方案之外,其他生态系统和创新方案演示还包括: 基于ST FlightSense™激光测距传感器的各种应用,包括各类智能系统启动、投影仪自动对焦及梯形标定,以及相机闪光灯强度控制。 精选方案 在STM32 2021峰会上,参观者还可以体验到意法半导体和合作伙伴基于ST技术开发的各种有趣的精选方案。 亚马逊物联网语音助手服务 (AVS):ST STEVAL-VOICE-UI Amazon™认证评估套件可评估在智能设备内集成AVS (Alexa Voice Services) for AWS IoT Services®语音助手服务的经济型解决方案,实现基于自然语言理解的最先进的免提语音控制。这项服务让用户可以享受更好的物联网终端产品体验,其中包括通过对话命令Amazon Alexa控制智能家居设备获取帮助、收听新闻、检查天气预报、播放音乐,以及基于Alexa 的强大语音助手功能。 OpenMV口罩佩戴检测和体温测量: OpenMV摄像头模块可以通过在STM32H7上运行的神经网络图像分类应用程序检测和判断接近人员是否佩戴口罩。 Sungrow太阳能逆变器和光伏板:该演示装置由太阳能逆变器和光伏板组成,将太阳能转换为电能,让世界变得更清洁、更绿色、更美好。控制模块由STM32F417ZGT6、STGWA40H120DF2*6和 STGWA80H65DFB*6组成,分别执行通信、HMI(人机界面),主控和电源变换。 双人赛训练用足球:该应用演示在传统足球训练基础上,加入了更多功能和更多趣味性。训练球内部装有一个STM32WB55,可以检测运动并捕获速度/加速度数据,还可以统计一个时间段内的踢球次数。该演示通过蓝牙BLE传输数据,能在智能手机上收集和显示足球数据。 欢迎莅临2021年STM32中国峰会,亲身体验意法半导体和客户开发的这些创新演示。

    时间:2021-04-27 关键词: STM32中国峰会 意法半导体 STM32

  • STM32 RTC及定时闹钟功能实现

    对于学习过51单片机的同学来说,一般使用RTC功能,一般都会使用51单片机+DS1302的方案,在STM32单片机中,因为STM32单片机自带RTC模块,所以我们只需要使用一个STM32即可,不需要外挂实时时钟芯片了。 RTC实时时钟简介 "RTC"是Real Time Clock 的简称,意为实时时钟。 STM32提供了一个秒中断源和一个闹钟中断源,修改计数器的值可以重新设置系统当前的时间和日期。 STM32的RTC外设,实质是一个掉电后还能继续运行的定时器,通过配置,可以让它准确地每秒钟中断一次。 所谓掉电,是指电源VDD断开的情况下,为了RTC外设掉电可以继续运行,必须给STM32芯片通过VBAT引脚接上外部3.3V供电。 当主电源VDD有效时,由VDD给RTC外设供电。 当VDD掉电后,由VBAT给RTC外设供电。 无论由什么电源供电,RTC中的数据始终都保存在属于RTC的备份域中,如果主电源和VBAT都掉电,那么备份域中保存的所有数据都将丢失。(备份域除了RTC模块的寄存器,还有42个16位的寄存器可以在VDD掉电的情况下保存用户程序的数据,系统复位或电源复位时,这些数据也不会被复位)。 上图来自于《STM32中文参考手册》 备份寄存器是42个16位的寄存器,可用来存储84个字节的用户应用程序数据。他们处在备份域里,当VDD电源被切断,他们仍然由VBAT维持供电,数据不会丢失,所以我们可以使用这些寄存器预存一些运行状态信息。 比如我们可以在RTC初始化之后,对BKP_DR1寄存器写入一个值,比如0x5050,然后在 RTC_Init(void)函数开始处,先读取并判断BKP_DR1寄存器的值是否为0x5050,进而可以知道系统的RTC是否有VBAT外部电源维持供电。 STM32时钟系统 参考《STM32中文参考手册》中对STM32的时钟系统的详细说明。 RTC的时钟源可以来源于3个渠道: 来自于低速外部时钟LSE,也就是外部的晶振,一般选用32.768KHz 来自于高速外部时钟HSE的128分频,即HSE/128 来自于低速内部时钟LSI 使用HSE分频时钟或者LSI的时候,在主电源VDD掉电的情况下,这两个时钟来源都会受到影响,因此没法保证RTC正常工作(在有自动校准功能并对时钟的精度要求不是很高的情况下,还是可以使用HSE分频时钟作为RTC时钟的),所以RTC一般都选用低速外部时钟LSE,晶振的频率为实时时钟模块中常用的32.768KHz,因为32768 = 2^15,分频容易实现1秒的时钟频率,所以被广泛应用到RTC模块。 在配置RTC模块的时钟时,把输入的32768Hz的RTCCLK进行32768分频得到实际驱动计数器的时钟TR_CLK = RTCCLK/37768 = 1Hz,计时周期为1秒,计时器在TR_CLK的驱动下计数,即每秒计数器RTC_CNT的值加1。 RTC时间设置 RTC时间设置就是对RTC计数器寄存器RTC_CNT进行设置。 该寄存器由两个16位的寄存器RTC_CNTH和RTC_CNTL组成,总共32位,用来记录秒钟值。 理论上可以计算2^32 = 4,294,967,296‬ s,大约136年。 所以设置RTC时间或者获取RTC时间,就是设置RTC_CNT寄存器或者获取RTC_CNT寄存器的值。 所以封装的设置时钟的函数RTC_Set(),就是求得设定的时间与1970年1月1日 00:00:00之间的秒数,然后通过RTC_SetCounter()函数,写入RTC_CNT寄存器即可。 注意: 每次操作RTC_CNT时应该要使能PWR 和 BKP 时钟,允许访问BKP域,否则会操作失败。 /* Enable PWR and BKP clocks*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);/* Allow access to BKP Domain */PWR_BackupAccessCmd(ENABLE); /* Wait until last write operation on RTC registers has finished*/RTC_WaitForLastTask();/* 修改当前RTC计数寄存器内容 */RTC_SetCounter(Cnt);/* Wait until last write operation on RTC registers has finished*/RTC_WaitForLastTask(); RTC闹钟 在实际应用中,我们有时会用到定时闹钟功能,我们简单的可以在main函数的while循环中,通过比对当前时间和设定时间值是否相等进行判断是否定时时间到,比如: //主循环 while(1) { times++; if(t!=calendar.sec) { t=calendar.sec; NowHour = calendar.hour; NowMinute = calendar.min; NowSecond = calendar.sec; if(NowHour==AlarmHour&&NowMinute==AlarmMinute&&NowSecond==AlarmSecond) { //执行预定动作 } } } 除了上面的方法外,我们还可以使用RTC的闹钟中断来实现。 使能RTC_IT_ALR中断,并设置闹钟时间: 闹钟中断响应 在主电源VDD有效的情况下(待机),RTC还可以配置闹钟事件使STM32退出待机模式。 结果展示 RTC_Init(void)函数中,设置初始化时间如下: 程序会在串口助手中,每秒钟输出一条时间信息,40S后执行一次闹钟中断。 STM32串口发送数据和接收数据方式总结! STM32配置SPI通讯功能 还在敲代码? 来看看如何自动生成"状态机"代码 SPI怎么玩?搞懂时序,运用自如 什么是DMA? STM32如何配置DMA? STM32基础分析——PWM配置 STM32单片机:独立看门狗、窗口看门狗的配置 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    时间:2021-04-04 关键词: 51单片机 STM32

  • UART的Rx和Tx引脚如何互换,电平如何反转

    转自 | AI电堂 今天给大家分享 关于STM32中UART的一些特性 ,主要针对较新系列STM32(如:STM32H7、G0、G4等 ) 的UART,可通过软件改变Rx和Tx引脚、电平反转、高低反序、介绍超时等。 嵌入式专栏 1 支持RXD和TXD管脚互换 有些时候,我们在外接RS232芯片时,可能会将RXD和TXD两根线接反。这类低级错误,一般是老司机才会犯。 如果大家知道USART的TXD和RXD管脚可以互换,那么在连接外设RS232芯片时,如果发生错误,就不必再修改硬件,只需直接在软件中将RXD和TXD的管脚反转过来即可修正错误。 参考上图,设置SWAP位,即可将RXD和TXD管脚互换。 嵌入式专栏 2 支持接收和发送的电平极性反转 第二个新特性: Tx和Rx 电平极性反转。 通常默认串口电平是高电平为逻辑1,低电平为逻辑0。而在STM32的USART新特性中是可以将高电平设置为逻辑0,低电平设置为逻辑1的。 这一特性,让我们在一些特殊的场景下灵活使用,如:USART外接了反相器时就可以直接使用。 在数据接收发送寄存器中,数据也是可以反转的,原来的0变为1,原来的1变为0,这和电平极性反转是类似。需要特别注意的是,在极性反转的时候,起始位和结束位也都反转了,所有的信号电平都反转;而在数据寄存器中只反转了数据位,其中也包含了校验位,没有反转信号的起始位和结束位的极性。 参考上图,在USART_CR2寄存器中TXINV、RXINV和DATAINV位来进行设置。 嵌入式专栏 3 支持数据高位与低位反序发送或接收 第三个新特性: 发送和接收数据时,可在寄存器中设置是先发低位还是先发高位 。 默认的配置都是先发送或接收低位的信号(bit 0),实际应用中,通过USART_CR2中的MSBFIRST设置后,也可以让USART先发送或接收高位信号(bit 7/8),这一点在对数据进行反序的时候会经常用到它。 我们可以考虑这种情况,如果需要把串口接收到的数据先进行反序操作之后,再进行计算,那这个硬件的功能就可以帮助我们节省很多软件的工作量。 嵌入式专栏 4 USART支持DMA传输 最后, STM32的USART都是支持DMA 的,这一点有利于做数据的连续发送和数据的缓冲接收。 在某些STM32产品系列中,如STM32F4和H7系列具有专门的串口FIFO,这就可以用来做串口唤醒,先让MCU进入到Sleep模式,当接收到一个完整的数据包,这个数据包可能是100个字节或者200个字节,之后再唤醒单片机,这样既可以做到不丢数据又可以降低MCU的唤醒频率。 另外,USART的接收还具有超时功能,可以人为设定一个时间,在USART的RTOR寄存器中进行设置,当串口接收的数据帧之间超过了这个设定值,就会引发一个超时中断,串口中会有一个叫RTOF的标志位来显示发生的超时事件,我们通过这个中断中应用的代码就可以知道串口的数据发生了中断现象,近似可认为对方的数据已经发送完成。这种方式,在串口上层协议的开发中,有很多应用场景。 USART 新特性小结 支持RXD和TXD管脚的互换 支持管脚上的电平逻辑反转和数据寄存器中的逻辑反转 支持数据高位与低位反序发送或接收,既可以先发送或接收低位,也可以先发送或接收高位 支持接收数据的超时功能,并且每个USART都可以支持DMA传输 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    时间:2021-03-25 关键词: UART STM32

  • 用IDA PRO + QEMU动态调试STM32固件

    出品 21ic论坛   yjmwxwx

    时间:2021-03-23 关键词: QEMU STM32

  • 如何识别STM32/GD32是否为翻新假货?

    最近,嵌入式ARM分享一篇《GD32也开始假货泛滥了》文章,嵌入式ARM的老友StrongerHuang也表示其技术交流群正在讨论芯片涨价和咸鱼上卖芯片的话题,并撰写了一文揭露了背景和识别翻新假货的方法。特此转载供大家参考。 1 芯片涨价背景 前两年的中美毛衣战,使国内一些技术型大企业受到了影响,比如华为。但是绝大部分电子相关的企业,受到的影响很小。 2020年,一场疫情,导致了一些半导体企业受到很大打击,比如工人罢工。 然后,一些原材料价格开始出现了不同程度的上涨,特别是今年初开始,很多金属、塑料等绝大部分原材料价格都上涨了,小到电阻电容,大到电视冰箱等消费电子产品,都出现了不同程度的涨价。 (图片来源网络,侵删) 芯片亦如此,我们熟知的MCU价格出现了不同程度的涨价,相信大家都知道了,特别是STM32部分型号价格甚至翻了好几倍。 在这种涨价潮的背景下,必定存在一些不良商家,然后,出现假货的概率就增加了。 2 STM32/GD32翻新或假货 STM32/GD32翻新或假货这个问题,有经验的工程师可能遇到过,包括我之前就遇到过,把GD32标志擦除,然后搞成STM32,还有从旧板子上拆下来的翻新STM32。 下面就来说说芯片翻新或假货的一些情况: 1.擦除标志 芯片擦除标志这种做法很常见,包括我们有时候开发的产品,为了防止别人山寨,也可能将芯片表面的标志擦除,以起到防止被人山寨的作用。 一些商家就会利用这种“狸猫换太子”的手段来牟利,一些兼容的芯片,比如早期我就知道很多STM32就是用GD32假冒的。 2.虚假型号 STM32内部Flash实际大小可能与型号不匹配,比如:STM32F103RF标准容量为768K,但Flash实际不止768K。 由此延伸出话题:你的STM32芯片FLASH容量真如ST官方选型手册那样吗? 一般对于初学者来说,内部FLASH完全足够,跑一个简单的裸机Demo,或者一个RTOS加上两个任务的Demo,对于现在的MCU完全没有压力。 但是,一旦你接触到实际项目,你会发现很多地方都会开支FLASH,而且有些项目占用FLASH还不小。比如:某种特定算法,加载字库,甚至放两张图片在FLASH里面。 再拿一个IAP应用编程的例子来说:一般对升级这个功能做的好一点的,会有一块区域(备份区域)与应用程序差不多大小的FLASH区域。就是说:为了保证安全,你程序下载保存在一个备份区域,等下载成功再更新应用程序。 这样做的目的:就是防止在下载的时候中途掉线,导致失败。 找了一个图,大致如下,将FLASH划分为3个区域(引导程序FLASH区域、应用程序FLASH区域、备份程序FLASH区域),你们琢磨一下。 一般我们项目提出需求之后,都会选择一款合适的MCU,首先想到的就是查看【选型手册】,除了选择外设资源之外,还有就是选择适合的FLASH容量大小。STM32产品命令规则如下: 说了关于FLASH的一些话题,回来说说本文的重点:我们的STM32内部FLASH可能不止上面选型手册说的那么大一点。 比如:我的MCU芯片具体型号为STM32F103RF,查看手册可以知道其容量为768K,但实际它有1M的FLASH容量。 我这里大概说两点简单验证的方法: 1.通过编程验证 FLASH_ProgramWord 2.通过工具读取FLASH数据 这个办法是最直接,也是最简单的办法。拿STM32 ST-LINK Utility这个下载工具来举例说明: (上图是我拿STM32F103RF真实MCU读出来的,应用程序起始地址就是0x080C0000,应用程序实际也运行起来了) 说了这么多,其实我想说的是:STM32芯片有许多也是类似,不止我上面举例的STM32F103RF,103RC标称的是256K,其实不止256K空间。如果你发现你FLASH空间不足了,通过上面方法可以看看是否不止那么大的空间。 3.翻新为原装正品 这种在某宝上最常见,那种看起来价格便宜,你零售买几个也发货这种十有八九都是翻新芯片。 翻新芯片,你买回来,可能写一个LED流水灯测试一下没有问题。但是,你上项目之后,特别是要求外设比较多,功能又复杂一点的项目,可能很快就原形毕露了。 运气不好,可能会出现以下几种情况: 1Flash容量寄存器 1.通过读寄存器 在STM32的“参考手册”中有Flash size data register这么一个寄存器(一般在手册最后),明确写了寄存器的基地址。 提示:不同芯片型号,可能这个寄存器地址不同。比如F103的基地址为:0x1FFFF7E0。 是一个16位的数值,出厂写入,程序只能读取。读取方法很简单,可以如下: uint16_t Flash_size; 用来作为序列号。 用来作为密码,在编写闪存时,将此唯一标识与软件加解密算法结合使用,提高代码在闪存存储器内的安全性。 用来激活带安全机制的自举过程。 STM32的UID共有96位(32 x 3)。所有,就有朋友,我是否可以只读取其中某一部分来作为唯一识别? 这个问题,严格来说,不可以。但如果不是特别严格,还是可以。因为这个UID是通过晶元、分批等来进行编号的。如果你买同一批次,你会发现那个编号可能连续。 现在还有许多初学的朋友在学习底层的一些知识,比如前面就有朋友想自己通过寄存器来编程,但是却不知道什么是寄存器基地址,什么是寄存器偏移地址。 1.基地址 每一个片内外设都有一个对应的基地址,而且是由厂商决定我们不能修改。如下图: 在程序中,你会发现和上面对应的代码: 2.偏移地址 偏移地址就是在基地址基础上偏移(一般是以4字节增加),比如TIM定时器的偏移地址: 同样,在程序中对应的代码通过结构体实现偏移: 关于基地址和偏移地址,不管是标准外设库还是HAL库,都是上面所示那种基地址+偏移的方法实现。 还是之前多次在文章中提到的,想要了解寄存器原理,或者通过寄存器来实现的朋友,最好参考“标准外设库”例程。HAL库封装的相对复杂,不适合研究最底层寄存器。 再进一步验证,写入数据(RAM、Flash)测试、各种外设基本功能测试等。 END 来源:StrongerHuang,作者:StrongerHuang 版权归原作者所有,如有侵权,请联系删除。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    时间:2021-03-15 关键词: 假货 GD32 STM32

  • 手把手教你怎么用STM32让相对编码器说话

    ▍编码器的由来和原理 若要对伺服系统中的电机进行高精度控制,需要准确的转子角度位置,这时候自然会想到,如果能张江转子每一圈进行细分,这样每次转多少角度便能精确知道。在这样的背景下,相对编码器就诞生了。 在网上找到下文这个图,很形象的表征了相对编码器的原理。 如图所示,在码盘上平均开出很多个等间距的槽,一段是LED灯发出信号,另一端是接收器接收信号。如果信号能穿过码盘,则接收信号为高电平,反之则为低电平。这样当转子转起来以后,就不断的处高低电平。这就是编码器基本原理。 可以看到这里有三个信号,A/B/Z,这时候就要想为什么要3个信号呢?如果仅仅对一圈做细分,命名一个信号就可以了。这就涉及到下面两个问题。 (1)如果是1个信号channel A,电机是正转还是反转就不知道了。需要一个相对的参考信号channel B,A和B相互呈一个角度,这样通过A和B的相对位置就能知道电机是顺时钟转还是逆时针转了。 (2)如果是2个信号,其中一旦有码盘有损坏,就可能出现检测结果无法校验的情况。举个例子,如果一圈开了16个槽,则每旋转一圈,正常情况下就有16个高低电平的信号出来。但如果一个槽坏了,实际上每转一圈只有15个信号出来,但这时如果仅仅通过channel A和channel B是无法判断的。在进行数据处理时还是认为16个信号为一圈,处理结果就有较大的偏差。为了避免这样的问题,补充z信号,一圈只出一个,这样就能相互交验了。一方面通过对A或者B计数,知道z是否有问题,反之对z信号计数就能知道A/B是否有问题。 所以就有了上图的z/A/B三个信号,共同组成了一个功能齐全的编码器。 在网上经常看到说A/B之间相互差90°,这个90°是认为360°为一个周期而言的。如下图所示。通过看A/B相对位置就知道电机是正转还是反转了。 实测波形,如下图所示(示波器不太好,有点毛刺) 正转 反转 ▍使用STM32,让编码器说话 背景 STM32中提供了编码器接口,比较适用于相对编码器的应用场景。在手册中可以看到: 可以看到这里使用专用的模块就能完成相应的计数,通过数据的变化就能测出电机的转速。 所以,我想让编码器说话。在家翻箱倒柜以后,我准备了如下几个东西: (1) 带编码器的直流电机:这是作为编码器的载体使用,电机编码器的分辨率较低,每圈只有16个脉冲。但不影响测试。 (2) 直流电源:用来直观的调电机的转速和正反转。 为了避免打广告的嫌疑,就不贴电源和电机图片了。 (3) STM32开发板:在家翻箱倒柜,找出2015年在21ic获得的STM32072 discovery板 (4) LED数码管。用来通过编码器的数据处理,显示电机的转速。 试验第一步,让LED数码管显示起来。 因为显示数据是最终目的。使用的这个板子,是集成了HC595锁存器的板子。相比于网上买的大部分51开发板数码管电机设计,使用两个HC595,可以大大减少pin脚的数量。网上使用的4位数码管,需要8个pin作为段选或者位选,非常麻烦。 根据HC595的手册,具有锁存加移位的特性(图中我标注所示) 最上面的3个SH-CP/DS/ST-CP,像极了SPI通信波形,只要合理配置,只需要3个信号线即可完成4数码管的轮流显示。 于是在开发板的pin做了如下硬件配置 Pin(数码管) 74HC595 SPI Pin SCLK Pin11(shift) SPICLK PB13 RCLK Pin12(Storage) NSS PB12 DIO Pin14(datainput) SPIMOSI PC3 QH Pin9(dataoutput) SPIMISO PC2 SPI配置代码如下(配置了SPI几个pin脚的定义,时钟,SPI模式等): void SPI_Digital_Tube_Config(void){ SPI_InitTypeDef SPI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; /* Disable the SPI peripheral */ SPI_Cmd(SPI2, DISABLE); /* Enable SCK, MOSI, MISO and NSS GPIO clocks */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); RCC_AHBPeriphClockCmd(SPI_Digital_Tube_SCK_GPIO_CLK | SPI_Digital_Tube_MOSI_GPIO_CLK| SPI_Digital_Tube_NSS_GPIO_CLK, ENABLE); /* SPI pin mappings */ GPIO_PinAFConfig(SPI_Digital_Tube_SCK_GPIO_PORT, SPI_Digital_Tube_SCK_SOURCE, SPI_Digital_Tube_SCK_AF); GPIO_PinAFConfig(SPI_Digital_Tube_MOSI_GPIO_PORT, SPI_Digital_Tube_MOSI_SOURCE, SPI_Digital_Tube_MOSI_AF); GPIO_PinAFConfig(SPI_Digital_Tube_MISO_GPIO_PORT, SPI_Digital_Tube_MISO_SOURCE, SPI_Digital_Tube_MISO_AF); GPIO_PinAFConfig(SPI_Digital_Tube_NSS_GPIO_PORT, SPI_Digital_Tube_NSS_SOURCE, SPI_Digital_Tube_NSS_AF); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_3; /* SPI SCK pin configuration */ GPIO_InitStructure.GPIO_Pin = SPI_Digital_Tube_SCK_PIN; GPIO_Init(SPI_Digital_Tube_SCK_GPIO_PORT, &GPIO_InitStructure); /* SPI MOSI pin configuration */ GPIO_InitStructure.GPIO_Pin = SPI_Digital_Tube_MOSI_PIN; GPIO_Init(SPI_Digital_Tube_MOSI_GPIO_PORT, &GPIO_InitStructure); /* SPI MISO pin configuration */ GPIO_InitStructure.GPIO_Pin = SPI_Digital_Tube_MISO_PIN; GPIO_Init(SPI_Digital_Tube_MISO_GPIO_PORT, &GPIO_InitStructure); /* SPI NSS pin configuration */ GPIO_InitStructure.GPIO_Pin = SPI_Digital_Tube_NSS_PIN; GPIO_Init(SPI_Digital_Tube_NSS_GPIO_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_Pin = SPI_Digital_Tube_NSS_PIN; GPIO_Init(SPI_Digital_Tube_NSS_GPIO_PORT, &GPIO_InitStructure); /* SPI configuration -------------------------------------------------------*/ SPI_I2S_DeInit(SPI2); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;// SPI_InitStructure.SPI_NSS = SPI_NSS_Hard; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_Init(SPI2, &SPI_InitStructure); /* Initialize the FIFO threshold */ SPI_RxFIFOThresholdConfig(SPI2, SPI_RxFIFOThreshold_QF); /* Enable the SPI peripheral */ SPI_Cmd(SPI2, ENABLE); // /* Enable NSS output for master mode */// SPI_SSOutputCmd(SPI2, ENABLE);} 使用TIM6作为定时器,配置代码如下(1ms定时周期): static void BASIC_TIM_Mode_Config(void){ TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; BASIC_TIM_APBxClock_FUN(BASIC_TIM_CLK, ENABLE); TIM_TimeBaseStructure.TIM_Period = BASIC_TIM_Period;//1ms TIM_TimeBaseStructure.TIM_Prescaler= BASIC_TIM_Prescaler;//47 TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_RepetitionCounter=0; TIM_TimeBaseInit(BASIC_TIM, &TIM_TimeBaseStructure); TIM_ClearFlag(BASIC_TIM, TIM_FLAG_Update); TIM_ITConfig(BASIC_TIM,TIM_IT_Update,ENABLE); TIM_Cmd(BASIC_TIM, ENABLE); } 实际上每次只会有一个数码管亮,为了较好的视觉体验,将数码管进行千位百位十位个位循环显示,这样做的好处是4个数码管轮流显示,其亮度相同,避免出现一个数码管过亮的情形,影响视觉体验。数码管代码如下: void DisplayNumber(uint16_t num){ uint8_t mythousandNum,myhundredNum,mytenNum,myunitNum=0; if(num>9999)num=9999; mythousandNum=num/1000%10; myhundredNum=num/100%10; mytenNum=num/10%10; myunitNum=num%10; switch(mydisplaybit) { case thousaud: Display16(mythousandNum,4); mydisplaybit=hundred; break; case hundred: Display16(myhundredNum,3); mydisplaybit=ten; break; case ten: Display16(mytenNum,2); mydisplaybit=unit; break; case unit: Display16(myunitNum,1); mydisplaybit=thousaud; break; default: Display16(mythousandNum,4); mydisplaybit=hundred; break; }} static void Display16(uint8_t num,uint8_t place){ GPIO_ResetBits(SPI_Digital_Tube_NSS_GPIO_PORT, SPI_Digital_Tube_NSS_PIN); uint16_t Temp=((Num[num])<<8)+((0x01)<<(place-1)); SPI2_Send_Byte16(Temp); GPIO_SetBits(SPI_Digital_Tube_NSS_GPIO_PORT, SPI_Digital_Tube_NSS_PIN);} 然后,每隔0.5s累加一次。在定时器中累计 void TIM6_DAC_IRQHandler(){ static uint16_t counter=0; static uint16_t num_buffer=0; if ( TIM_GetITStatus( BASIC_TIM, TIM_IT_Update) != RESET ) { counter++; if(counter>499) { num_buffer++; counter=0; } DisplayNumber(num_buffer); TIM_ClearITPendingBit(BASIC_TIM , TIM_FLAG_Update); } } 显示的效果如下: 所以,初试成功。 试验第二步,让编码器说话。 首先,在STM32中配置编码器。 使用PA6和PA7作为定时器3的通道1和通道2,进行下图模式的计数。 即效果如下: 代码如下 void TIM3_EncoderConfig(void){ TIM_ICInitTypeDef TIM_ICInitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; HALL_TIM_APBxClock_FUN(ENCODER_TIM_CLK, ENABLE); /* GPIOA clock enable */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); //PA6 & PA7 RCC_AHBPeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); /* phase A & B*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_1);//TIM3_CH1 GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_1);//TIM3_CH2 TIM_DeInit(TIM3); TIM_TimeBaseStructure.TIM_Period =0xffff; TIM_TimeBaseStructure.TIM_Prescaler =0; TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure); TIM_EncoderInterfaceConfig(TIM3,TIM_EncoderMode_TI12,TIM_ICPolarity_BothEdge,TIM_ICPolarity_BothEdge); TIM_ICStructInit(&TIM_ICInitStructure); TIM_ICInitStructure.TIM_ICFilter = 0; TIM_ICInit(TIM3, &TIM_ICInitStructure); // Clear all pending interrupts TIM_ClearFlag(TIM3, TIM_FLAG_Update); TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); //Reset counter TIM_SetCounter(TIM3,0); TIM_Cmd(TIM3, ENABLE); /* Enable the TIM1 global Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);} 然后在中断服务函数中,将编码器的相对值计算出来,并根据编码器计数的相对变化,计算出电机的转速。具体代码如下: void TIM6_DAC_IRQHandler(){ static uint16_t counter=0; static uint16_t num_buffer=0; static uint16_t temp_now=0; static uint16_t temp_pre=0; static uint16_t speed=0; if ( TIM_GetITStatus( BASIC_TIM, TIM_IT_Update) != RESET ) { counter++; temp_now=(TIM_GetCounter(TIM3)&0xffff); if(counter>499) { num_buffer=(temp_now-temp_pre)>0?temp_now-temp_pre:temp_pre-temp_now; speed=100*num_buffer*60/64; counter=0; } DisplayNumber(speed); if(counter%10==0)temp_pre=temp_now; TIM_ClearITPendingBit(BASIC_TIM , TIM_FLAG_Update); } } 同时,为了防止TIM3中断溢出,记得清除中断标志位 void TIM3_IRQHandler (){ if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) { TIM_ClearITPendingBit(TIM3, TIM_IT_Update); }} 实际效果如下图所示(东西太多,手机不好拍动图,只能静物显示),可知,当电机电压9.32V时,转速为843rpm。当电压为18.7V时,转速为1687rpm。编码器的波形也用示波器显示出来了。还不错哈,哈哈哈。 ▍结论 本文使用STM32F0 discovery开发板,完成了编码器计数和电机转速的计算,并通过数码管将电机转速实时显示出来。

    时间:2021-03-15 关键词: 编码器 相对编码器 STM32

  • STM32学习笔记 | ADC采集数据常见问题

    ADC,Analog-to-Digital Converter(模数转换器),其应用非常广泛,比如温度、湿度、压力、声音等传感器领域。 ADC的类型很多,STM32内部集成的ADC为逐次逼近型。STM32虽然是通用MCU芯片,但它内部集成的ADC也非常出色,不比一些专用ADC芯片差。 嵌入式专栏 1 STM32 ADC 基础内容 STM32内部集成的ADC与型号有关,有16位、12位ADC,内部集成ADC多达4个,通道数多达40个,甚至更多。 1. ADC分辨率 分辨率决定了ADC的转换精度,按理说分辨率越高越好,但价格更贵。 STM32内部集成的ADC最高16位,2的16次方,即65536的分辨率。只有少数STM32才集成16位分辨率的ADC,绝大部分支持12位。 当然,有时出于提高转换速率的考虑,可以软件配置成10 位、 8 位或 6 位的分辨率。 2. ADC采样率 采样率指每秒进行AD转换的次数,STM32的采样率由ADCK时钟,以及分频比决定。 不同型号的STM32,其ADCCLK时钟也有差异,具体可参看芯片对应的手册。 3. ADC通道 STM32的每个ADC有数条复用模拟输入通道,具体通道数因不同系列及型号而异。片内温度传感器、内部参考电压、VBAT还可以与内部模拟通道相连,便于测量和使用。 4. ADC数据对齐 STM32的AD转换后存储数据的对齐方式可通过软件配置成左对齐、右对齐。比如规则组12位分辨率左右对齐如下: 这里数据对齐还与规则组/注入组、分辨率等有关。 5.ADC触发方式 STM32触发ADC转换的方式有很多种,软件触发、外部事件(如定时器事件、 EXTI 中断事件)触发转换。 外部事件触发还分为上升沿和下降沿触发: STM32 ADC基础内容及配置参数比较多,更多细节请查阅芯片对应的参考手册。 嵌入式专栏 2 STM32 ADC 参数配置 STM32 ADC配置的参数相对较多,只要理解了ADC的基础内容,再结合STM32CubeMX或官方提供的例程,使用ADC就较容易了。 比如:最基础的单通道配置(默认配置): 1.STM32CubeMX 2.标准外设库 ADC_InitTypeDef ADC_InitStructure;ADC_CommonInitTypeDef ADC_CommonInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;ADC_CommonInit(&ADC_CommonInitStructure); ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;ADC_InitStructure.ADC_ScanConvMode = DISABLE;ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;ADC_InitStructure.ADC_NbrOfConversion = 1;ADC_Init(ADC1, &ADC_InitStructure); ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_3Cycles); ADC_Cmd(ADC1, ENABLE); 这里结合STM32F4,STM32CubeMX和标准外设库描述了最基础的参数配置。 STM32CubeMX图形化工具配置起来很简单,但前提需要理解各参数的含义。 每项独立的参数其实不难理解,难在各项参数复合使用,比如:多通道、外部事件定时器触发、DMA等。 嵌入式专栏 3 STM32 ADC 常见问题 STM32内部集成ADC是一个常用的模块,单通道简单采集电压比较容易,但多通道、高频次等一些特殊情况下,对软件和硬件的要求更高。 些特殊情况下,对软件和 问题一:参考电压电阻问题 ‍STM32部分型号芯片具有VREF+、 VREF-参考电压引脚。而且,参考电压必须低于VDDA电压。 ‍ 实际应用存在 VREF+ 与 VDDA 之间通过电阻(比如10K)连接的情况,这样就会因电阻分压导致测量值存在偏差。 解决办法:VREF+ 与 VDDA通过0Ω电阻连接,同样,VREF- 与 VDDS也要通过0欧电阻连接。 问题二:输入引脚浮空问题 有工程师会会习惯性在外部信号和STM32引脚间加一个二极管。 如果外部电压为0时,在STM32引脚处的状态即为浮空状态,读取出来的电压就是一个不确定值(通常为1/2VDD电压)。 解决办法:去掉二极管,同时增加外围抗干扰电路。 问题三:多通道序列采集问题 在多通道采集时,采集电压都为序列中第一个的电压,通常是因为未理解规则组序列转换,因软件配置不对导致的问题。 解决办法:首先要使能扫描模式,再次要正确配置规则组序列。(同样的问题在使用DMA情况下也容易出现,需要正确理解连续转换这些细节问题)。 问题四:通道间串扰问题 使用 ADC 常规通道的扫描模式采集多路模拟信号时,可能存在各路信号转换相同结果的情况(实际各路电压不同)。 问题原因是相邻通道之间透过采样电容Cs发生了藕合。 当 ADC 的采样电容在两个通道之间进行切换时,电路类似如下图: 解决办法:增大 ADC 相邻两个通道采样之间的延时:ADC_TwoSamplingDelay. 问题五:采样时间与外部输入阻抗不匹配 在做AD转换时,我们需考虑信号输入电路的阻抗,整体上,该阻值越大,为保证转换精度,所需采样时间就越长,STM32芯片可编程的采样时间是有限的,显然这个外部输入阻抗也是有上限的。关于这点,在STM32芯片数据手册里有关ADC特性的章节有详细解释,可以阅读。 解决办法:根据实际输入阻抗和具体应用来配置合适的采样时间。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    时间:2021-03-15 关键词: 模数转换器 ADC STM32

  • 意法半导体发布新软件包,支持在STM32 MCU上开发Microsoft® Azure RTOS项目,加快智能产品研发周期

    中国,2021年3月11日——横跨多重电子应用领域的全球领先的半导体供应商意法半导体(STMicroelectronics,简称ST) ,加大对基于Microsoft®Azure RTOS平台的下一代智能物联网设备的开发支持,发布面向产品研发团队的功能丰富的STM32Cube扩展包系列的首个软件包。 意法半导体和微软于2020年宣布,开发者可以从意法半导体的STM32Cube *生态系统直接使用Azure RTOS套件。基于这项合作计划,新软件包提供更多的应用代码示例,帮助工程师克服常见的开发挑战,缩短产品上市时间。 软件包免版税,开发人员可以立即使用和自定义代码示例。 意法半导体副总裁、微控制器事业部总经理Ricardo de Sa Earp表示: “STM32生态系统是业界公认的市场领先的嵌入式开发生态系统,ST将不断增加新的软件和开发工具,以期为客户项目带来高价值。有了最新的STM32Cube扩展包,当客户开发运行Azure RTOS的新产品时,可以最快的速度把新产品推向市场。” 该系列扩展包的首个软件包X-CUBE-AZRTOS-H7让使用意法半导体 STM32 MCU产品家族中性能最高的STM32H7微控制器(MCU)系列开发项目的工程师赢在起跑线上。意法半导体将在2021年发布类似的支持其他STM32 MCU的软件包。 STM32H7系列包含100多款单核双核产品,处理性能更是取得了Arm® Cortex®-M处理器MCU基准测试的最好成绩,并具有强大的图形处理功能和硬件网络安全保护功能。 技术详情 STM32生态系统为开发者提供嵌入式软硬件开发资源。STM32Cube软件包和软件工具包括功能强大的STM32CubeMX配置工具、 STM32CubeIDE集成开发环境、 STM32Cube MCU专用包,以及专门的 STM32Cube扩展包。意法半导体还提供各种硬件开发工具,包括经济划算的STM32 Nucleo 开发板、简单易用的探索套件和功能齐全的评估板。 用户可以通过STM32Cube工具使用Microsoft Azure RTOS套件。X-CUBE-AZRTOS-H7软件包兼容STM32CubeMX和STM32CubeIDE,可以在图形界面直接配置Azure RTOS中间件栈,并随附大量支持NUCLEO-H723ZG、STM32H747I-DISCO、STM32H743I-EVAL 和 STM32H735G-DK开发板的应用程序代码示例。 Azure RTOS套件集成了开发可靠、节能的智能产品所需的基本组件,其中包括内存空间占用很小的适合资源受限应用的Azure RTOS ThreadX实时操作系统,以及支持RAM、闪存和移动盘等各种存储媒体的FileX容错文件系统,还包括工业级TCP/IP网络协议栈和USB协议栈。 Common Criteria (CC) EAL4+认证的IP层安全(IPsec)和套接字层安全(TLS and DTLS)协议,以及FIPS 140-2认证软件加密库。用户还可以直接从微软获得包括IEC 61508 SIL4、IEC 62304 Class C和ISO 26262 ASIL-D在内的安全预认证。 了解更多信息,下载STM32Cube工具和软件,请访问STM32Cube生态系统。

    时间:2021-03-11 关键词: MCU 意法半导体 STM32

  • 全新原装STM32/GD32可能是假货

    作者 | strongerHuang 微信公众号 | 嵌入式专栏 今天,我的技术交流群在讨论芯片涨价和咸鱼上卖芯片的话题,然后又看到了公众号嵌入式ARM分享了一篇《GD32也开始假货泛滥了》文章,我也来说说关于芯片涨价和假货的一些问题。 嵌入式专栏 1 芯片涨价背景 前两年的中美毛衣战,使国内一些技术型大企业受到了影响,比如华为。但是绝大部分电子相关的企业,受到的影响很小。 2020年,一场疫情,导致了一些半导体企业受到很大打击,比如工人罢工。 然后,一些原材料价格开始出现了不同程度的上涨,特别是今年初开始,很多金属、塑料等绝大部分原材料价格都上涨了,小到电阻电容,大到电视冰箱等消费电子产品,都出现了不同程度的涨价。 (图片来源网络,侵删) 芯片亦如此,我们熟知的MCU价格出现了不同程度的涨价,相信大家都知道了,特别是STM32部分型号价格甚至翻了好几倍。 在这种涨价潮的背景下,必定存在一些不良商家,然后,出现假货的概率就增加了。 嵌入式专栏 2 STM32/GD32翻新或假货 STM32/GD32翻新或假货这个问题,有经验的工程师可能遇到过,包括我之前就遇到过,把GD32标志擦除,然后搞成STM32,还有从旧板子上拆下来的翻新STM32。 下面就来说说芯片翻新或假货的一些情况: 1.擦除标志 芯片擦除标志这种做法很常见,包括我们有时候开发的产品,为了防止别人山寨,也可能将芯片表面的标志擦除,以起到防止被人山寨的作用。 一些商家就会利用这种“狸猫换太子”的手段来牟利,一些兼容的芯片,比如早期我就知道很多STM32就是用GD32假冒的。 2.虚假型号 STM32内部Flash实际大小可能与型号不匹配,比如:STM32F103RF标准容量为768K,但Flash实际不止768K。 我之前分享过一篇文:你的STM32芯片FLASH容量真如ST官方选型手册那样吗? 有些商家就会因此“虚标”容量大小,有点类似“虚假U盘”的情况。 3.翻新为原装正品 这种在某宝上最常见,那种看起来价格便宜,你零售买几个也发货这种十有八九都是翻新芯片。 翻新芯片,你买回来,可能写一个LED流水灯测试一下没有问题。但是,你上项目之后,特别是要求外设比较多,功能又复杂一点的项目,可能很快就原形毕露了。 运气不好,可能会出现以下几种情况: 软件通宵加班数日无果,甩锅硬件; 硬件飞线各种测试,换一块芯片解决问题; 软件和硬件工程师干一架; ······ 所以,现在市面上出现很多假货,或者有问题的芯片不足为奇,包括嵌入式ARM说的“GD32也开始假货泛滥了”,我觉得肯定存在。 嵌入式专栏 3 识别翻新或假货 识别STM32/GD32翻新或假货,常规的操作就是先焊接在PCB板(或在工装夹具),上电看是否正常,如果出现发烫、电流过大、甚至冒烟等情况,要注意了。 然后读取一下芯片信息,比如Flash容量,UID信息、选项字节等。 这里分享之前的文章:关于STM32的这几个寄存器,你知道吗? 再进一步验证,写入数据(RAM、Flash)测试、各种外设基本功能测试等。 嵌入式专栏 4 建议正规渠道 买到假货或山寨货,付出的代价是很大的,前期开发阶段现了问题都还好,就怕批量生产之后才发现问题。 更可怕的是,大批量出货,产品在客户手里因为芯片假货出现问题的情况。 今天交流群里有人在讨论咸鱼上卖芯片的情况,我觉得,咸鱼买芯片来玩玩可以,做产品最好慎重。 比如淘宝搜出来十多元的STM32还是进口原装正品,你信吗? 正规渠道买的芯片,都还存在一定概率是芯片自身的问题,更别说咸鱼这种平台了。 我之前就遇到过,从正规且比较大的代理商买的STM32,出现了问题,FAE多次到公司都没找出问题,最后拿回原厂解剖芯片,发现真的是芯片自身的问题。 所以,不要因为便宜就从淘宝、咸鱼上购买芯片,建议走正规渠道。否则,可能会付出很大代价。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    时间:2021-03-11 关键词: 芯片 GD32 STM32

  • STM32学习笔记 | 片内FLASH读写失败问题分析

    FLASH,指Flash Memory,是一种非易失性存储器(闪存),掉电能正常保存数据。 STM32的存储器通常包含内部SRAM、内部FLASH,部分系列还包含EEPROM。其中FLASH通常用于存储代码或数据,可被读写访问。 嵌入式专栏 1 STM32 FLASH 基础内容 STM32的FLASH组织结构,可能因不同系列、型号略有不同。比如大家熟悉的STM32F1中小容量一页大小只有1K,而F1大容量一页有2K。 还比如有些系列以扇区为最小单元,有的扇区最小16K,有的128K不等。 本文主要结合F4系列来描述关于FLASH的相关内容。 1.Flash 结构 通常Flash包含几大块,这里以F40x为例: 主存储器:用来存放用户代码或数据。 系统存储器:用来存放出厂程序,一般是启动程序代码。 OTP 区域:一小段一次性可编程区域,供用户存放特定的数据。 选项字节:存放与芯片资源或属性相关的配置信息。 2.Flash 常规操作 Flash 读、写(编程)、擦除: 128 位宽数据读取 字节、半字、字和双字数据写入 扇区擦除与全部擦除 (提示:不同系列可能存在差异,比如还有字节读取,页擦除等) Flash 读、写保护:通过配置选项字节实现。 3.Flash 容量 STM32的Flash容量出厂已经决定,可根据型号得知容量大小。 4.存储器端格式 目前STM32存储器组织结构默认为小端格式:数据的低字节保存在内存的低地址。 更多内容请查阅芯片对应的参考手册。 嵌入式专栏 2 FLASH 选项字节 STM32内部Flash具有读写保护功能,想要对Flash进行读写操作,首先要去除读写保护,读写保护通过配置选项字节完成。 配置选项字节,常见两种方式:1.软件编码;2.编程工具; 1.软件编码 比如STM32F4系列标准外设库库提供函数: void FLASH_OB_Unlock(void);void FLASH_OB_Lock(void);void FLASH_OB_WRPConfig(uint32_t OB_WRP, FunctionalState NewState);void FLASH_OB_WRP1Config(uint32_t OB_WRP, FunctionalState NewState);void FLASH_OB_PCROPSelectionConfig(uint8_t OB_PcROP);void FLASH_OB_PCROPConfig(uint32_t OB_PCROP, FunctionalState NewState);void FLASH_OB_PCROP1Config(uint32_t OB_PCROP, FunctionalState NewState);void FLASH_OB_RDPConfig(uint8_t OB_RDP);void FLASH_OB_UserConfig(uint8_t OB_IWDG, uint8_t OB_STOP, uint8_t OB_STDBY);void FLASH_OB_BORConfig(uint8_t OB_BOR);void FLASH_OB_BootConfig(uint8_t OB_BOOT);FLASH_Status FLASH_OB_Launch(void);uint8_t FLASH_OB_GetUser(void);uint16_t FLASH_OB_GetWRP(void);uint16_t FLASH_OB_GetWRP1(void);uint16_t FLASH_OB_GetPCROP(void);uint16_t FLASH_OB_GetPCROP1(void);FlagStatus FLASH_OB_GetRDP(void);uint8_t FLASH_OB_GetBOR(void); 软件编码通过调用这些函数接口就可以配置选项字节。 2.编程工具 比如STM32CubeProg编程工具: 配置STM32选项字节,还可通过ST-LINK Utility、STVP等类似工具进行配置。 提示:不同型号的STM32选项字节可能略有差异。 嵌入式专栏 3 FLASH 读写擦除操作 STM32内部Flash和其他外部Flash类似,支持读、写、擦除等常规操作。对内部Flash操作之前通常需要解锁、去保护等操作。 比如: FLASH_OB_Lock();FLASH_OB_WRPConfig(OB_WRP_Sector_All, ENABLE);FLASH_OB_PCROPConfig(OB_PCROP_Sector_All, ENABLE); 1.读数据 读取内部Flash数据通常有两种方式: 通过程序(编码)读取 通过外部(编程)工具读取 程序(编码)读取: uint32_t uwData32 = 0;uint32_t uwAddress = 0x08001000;uwData32 = *(__IO uint32_t*)uwAddress; 外部编程工具读取: 读取前提:没有读保护,设置好读取地址,长度、数据宽度等。 2.写数据 往STM32内部Flash写数据和读数据类似,但写数据地址不能有数据,也就是写之前要擦除数据。 所以,相对读数据,通常写之前需要一些额外操作,比如: FLASH_Unlock();FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR|FLASH_FLAG_PGSERR); 通过工具写数据,就是我们量产时说的下载数据,正式一点说法叫编程。 3.擦除数据 擦除数据通常分擦除页、扇区、整块,擦除时间也因型号不同、速度不同有差异。 提示:该部分内容建议参考官方提供的Demo(标准外设库和HAL都有基本例程) 嵌入式专栏 4 FLASH 常见问题 STM32内部Flash主要用途是存储程序代码和数据。操作内部Flash要慎重,一旦操作不当就有可能会破坏整个程序。 问题一:编程(写数据)地址非对齐 写数据时,我们要指定写入的地址,如果写入地址为非对齐,则会出现编程对齐错误。 比如: 遵循32位(4字节)地址对齐,你的地址只能是4的倍数。0x08001000正确,0x08001001错误。 提示:不同型号对齐宽度可能不同,有的32位、有的128位等。 解决办法:通过“取余”判断地址。 问题二:编程地址数据未擦除 写数据之前需要擦除对应地址数据才能正常写入,否则会出现失败。 我们擦除数据通常是页,或扇区,写入某个地址数据,就可能影响其他地址的数据,如果直接覆盖就会出现问题。 解决办法:通常的做法是读出整页(或扇区)数据并缓存,再擦除整页,再写入。 问题三:擦除时读取数据 STM32内部Flash在进行写或擦除操作时,总线处于阻塞状态,此时读取Flash数据就会出现失败。【双BANK模式除外】 解决办法:通过标志判断写/擦除操作是否完成。 问题四:电压不稳定写入失败 处于外界干扰较大的环境,供电就有暂降的可能,而对STM32内部Flash进行操作时,如果低于特定电压就会出现编程失败。 操作Flash的最低电压既与工作频率有关,也与STM32型号有关(具体需要看数据手册)。 解决办法:通过完善硬件电路保证电压稳定。电源电压不够或不稳导致隐患往往不易觉察!! 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    时间:2021-03-09 关键词: 闪存 Flash STM32

  • 意法半导体推出支持STM32的计算机视觉快速开发工具助力经济实惠的边缘AI应用开发

    中国,2021年3月4日——意法半导体推出新的AI固件功能包和摄像头模块硬件套件,让嵌入式开发人员开发出可在基于STM32 *微控制器(MCU)的边缘设备上运行的经济实惠且功能强大的计算机视觉应用。 STM32Cube功能包FP-AI-VISION1包含几个完整的计算机视觉应用代码示例,这些例程在STM32H747上运行卷积神经网络(CNN),并且可以在STM32全系列产品上轻松移植。该固件提出了几个应用示例,开发人员可以用所选数据集重新训练神经网络,为解决各种用例问题提供更大的自由空间和灵活度。 新功能包括支持USB VC摄像头(网络摄像头模式),简化图像采集任务,还包括食品分类和用户存在检测代码示例,其中用户存在检测示例可创建方便的视觉“ 唤醒语”,将系统从省电模式唤醒。在STM32 Wiki中有一篇如何将使用Teachable Machine在线工具配合STM32Cube.AI和FP-AI-VISION1功能包创建图像分类应用的文章。 B-CAMS-OMV摄像头套件与FP-AI-VISION1固件配合使用效果最好,并提供培训部署神经网络模型所需的硬件。摄像头套件包含一个内置意法半导体MB1379 500万像素OV5640彩色摄像头模块的转接卡。转接卡兼容所有的配有ZIF接口的STM32 Discovery探索板和评估板,还可以与意法半导体的VG5661车规灰度全局快门摄像头配合使用。此外,Waveshare接口和OpenMV接口让用户可以连接各种第三方红外和可见光摄像头,以解决更广泛的计算机视觉应用问题。在STM32 Wiki上有一篇如何将STM32Cube.AI生成的代码集成到OpenMV生态系统的文章。 FP-AI-VISION1包含各种帧缓冲处理功能、摄像头驱动程序,以及图像捕获软件、预处理软件和神经网络推断软件,还有几种神经网络模型可供使用,包括基于浮点的模型和X-CUBE-AI生成的量化模型,X-CUBE-AI是意法半导体优化的人工神经网络C代码生成器,因为支持灵活的内存配置,可以让开发者为预期的应用微调神经模型。

    时间:2021-03-04 关键词: 计算机视觉 边缘AI STM32

  • 基于STM32、FreeRTOS实现硬件看门狗+软件看门狗监测多任务的思路

    作者 | strongerHuang 微信公众号 | 嵌入式专栏 这是一篇旧文,技术交流群有人在讨论这个问题,今天就来分享一下。 我们都知道硬件看门狗的目的: 是用来监测系统,防止系统死机,并在死机的情况下使其系统复位重启。 在RTOS操作系统中,如果任务(线程)较多,出现高优先级任务长时间占用CPU资源,低优先级任务长时间得不到执行这种想象,那么我们的系统就是具有“Bug”的系统。 如上描述,假如我们的线程没有死机,只是长时间得不到执行。在这种异常情况下,我们又不希望系统复位,只希望执行特定代码,那我们该如何来避免这种问题呢? 嵌入式专栏 1 关于看门狗 硬件看门狗:利用一个定时器计数电路,其定时输出连接到电路的复位端,程序在一定时间范围内对定时“喂狗”。 因此程序正常工作时,定时器总不能溢出,也就不能产生复位信号。如果程序出现故障,不在定时周期内喂狗,就使得看门狗定时器溢出产生复位信号并重启系统。 在STM32中,有两个看门狗:独立看门狗和窗口看门狗。原理和功能都类似,只是应用场景不一样。 软件看门狗:软件看门狗和硬件看门狗原理类似,都是定期(在时间溢出之内),对其喂狗。只是软件喂狗的方式是通过自身设计的计数来实现。 嵌入式专栏 2 硬件+软件看门狗监测多任务的原理 1.利用一个监测线程(自身),来监测其它多个线程; 2.利用硬件看门狗来监测自身。 如图: 假如我系统中有多个应用线程(如上图),我就利用一个监测线程(自身),来监测其它多个应用线程。 同时,为了防止自身线程异常,利用一个硬件看门狗来监测自身。这样就可以做到双重监测的作用。 嵌入式专栏 3 结合软件来讲原理 上一节上述的原理可能对于有些人来说,是比较抽象的。那么这一节来看看代码: 监测线程(自身): 简单来说:在监测线程(自身)之中,需要对硬件看门狗进行喂狗。软件看门狗的角色:在这里就是对齐计数,浏览是否溢出,我把它封装成一个浏览函数。具体的喂狗就在其他各个被监测的线程中。 那么,再看软件看门狗对其中一个应用线程喂狗的代码: 这里只是简单的举例,一个主线程里面的喂狗。相当于:我线程启动之后,就需要定时喂狗。如果这里长时间不喂狗,那么监测线程(自身)就会发现你没有喂狗。 嵌入式专栏 4 简答的实现方法 看到这里,相信大家都知道其原理了。具体实现的方式方法很多种,可根据自己实际项目需要,添加相应的接口。这里举例几点吧。 定义一个数据结构: 这里举例,是实现最基础的东西,比如计数器,最大超时值等。 注册接口函数: 监测浏览函数接口: 以上只是教大家方法,具体的实现,可自己根据自己习惯,项目需求来定制化开发。

    时间:2021-03-03 关键词: 看门狗 FreeRTOS STM32

  • STM32单片机和51单片机有何区别?

    单片微型计算机简称单片机,简单来说就是集CPU(运算、控制)、RAM(数据存储-内存)、ROM(程序存储)、输入输出设备(串口、并口等)和中断系统处于同一芯片的器件。 在我们自己的个人电脑中,CPU、RAM、ROM、I/O这些都是单独的芯片,然后这些芯片被安装在一个主板上,这样就构成了我们的PC主板,进而组装成电脑。而单片机将这些都集中在了一个芯片上。 51单片机 应用最广泛的8位单片机,当然也是初学者们最容易上手学习的单片机。最早由Intel推出,由于其典型的结构和完善的总线专用寄存器的集中管理,众多的逻辑位操作功能及面向控制的丰富的指令系统,堪称为一代“经典”,为以后的其它单片机的发展奠定了基础。 ▼ 51单片机特性 51单片机之所以成为经典,成为易上手的单片机主要有以下特点: 从内部的硬件到软件有一套完整的按位操作系统,称作位处理器,处理对象不是字或字节而是位。不但能对片内某些特殊功能寄存器的某位进行处理,如传送、置位、清零、测试等,还能进行位的逻辑运算,其功能十分完备,使用起来得心应手。 同时在片内RAM区间还特别开辟了一个双重功能的地址区间,使用极为灵活,这一功能无疑给使用者提供了极大的方便。 乘法和除法指令,这给编程也带来了便利。很多的八位单片机都不具备乘法功能,做乘法时还得编上一段子程序调用,十分不便。 ▼ 51单片机缺点 (1)AD、EEPROM等功能需要靠扩展,增加了硬件和软件负担。 (2)虽然I/O脚使用简单,但高电平时无输出能力,这也是51系列单片机的最大软肋。 (3)运行速度过慢,特别是双数据指针,如能改进能给编程带来很大的便利。 (4)51保护能力很差,很容易烧坏芯片。 ▼ 51单片机应用范围 目前在教学场合和对性能要求不高的场合大量被采用。 使用最多的器件:8051、80C51。 STM32单片机 由ST厂商推出的STM32系列单片机,行业的朋友都知道,这是一款性价比超高的系列单片机,应该没有之一,功能及其强大。其基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M内核;同时具有一流的外设,1μs的双12位ADC,4兆位/秒的UART,18兆位/秒的SPI等。 在功耗和集成度方面也有不俗的表现,当然和MSP430的功耗比起来是稍微逊色的一些,但这并不影响工程师们对它的热捧程度。由于其简单的结构和易用的工具,再配合其强大的功能,在行业中赫赫有名。 ▼ STM32单片机特性 (1)内核:ARM 32位Cortex-M3 CPU,最高工作频率72MHz,1.25DMIPS/MHz,单周期乘法和硬件除法。 (2)存储器:片上集成32-512KB的Flash存储器,6-64KB的SRAM存储器。 (3)时钟、复位和电源管理:2.0-3.6V的电源供电和I/O接口的驱动电压,POR、PDR和可编程的电压探测器(PVD),4-16MHz的晶振,内嵌出厂前调校的8MHz RC振荡电路,内部40 kHz的RC振荡电路,用于CPU时钟的PLL,带校准用于RTC的32kHz的晶振。 (4)调试模式:串行调试(SWD)和JTAG接口,最多高达112个的快速I/O端口、最多多达11个定时器、最多多达13个通信接口。 ▼ STM32常用的器件 使用最多的器件:STM32F103系列、STM32 L1系列、STM32W系列。 51和STM32的区别 51单片机是对所有兼容Intel8031指令系统的单片机的统称,这一系列的单片机的始祖是Intel的8031单片机,后来随着flash ROM技术的发展,8031单片机取得了长足的进展成为了应用最广泛的8bit单片机之一,它的代表型号就是ATMEL公司的AT89系列。 STM32单片机则是ST(意法半导体)公司使用ARM公司的cortex-M3为核心生产的32bit系列的单片机,它的内部资源(寄存器和外设功能)较8051、AVR和PIC都要多的多,基本上接近于计算机的CPU了,适用于手机、路由器等。 版权归原作者所有,如有侵权,请联系删除。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    时间:2021-03-03 关键词: 51单片机 STM32

  • STM32学习笔记 | I2C通信容易出错的情况

    I²C:全称为Inter-Integrated Circuit(内部集成电路),是一种串行通讯总线,常用于嵌入式电子产品中。 I²C是飞利浦公司在1980年为了让各种低速设备(飞利浦芯片)连接起来而研发的一种通信总线。目前,I²C依然是最常见的通信总线之一,现在绝大部分MCU都内部集成了I²C控制器,STM32也不例外,至少有一个I²C控制器,有的型号甚至多达6个。 嵌入式专栏 1 STM32 I2C基础内容 I²C总线协议有多个版本,有的STM32遵循的是第2版本,有的是第3版本。所以,不同型号的 STM32 中I²C 可能存在一些差异,但基本功能相似。 1. 主从模式特性 主模式特性: 时钟生成 起始位和停止位生成 从模式特性: 可编程 I²C地址检测 双寻址模式,可对 2 个从地址应答 停止位检测 2. 通信速度 标准速度:高达 100 kHz 快速速度:高达 400 kHz 超快速度:高达 1 MHz(第3版) 3.寻址模式 7 位寻址模式 10 位双寻址模式 广播呼叫地址 4.收发模式 从发送器 从接收器 主发送器 主接收器 这些都是STM32 I²C 的基础功能,更多内容请查阅芯片对应的参考手册。 嵌入式专栏 2 I2C 总线协议 I²C总线就两根线:SCL时钟信号,SDA数据信号。其中SCL由主机产生,SDA由主机或者从机产生。 I²C是同步串行通信,同一时间SDA只能由一个设备发送信号,也就是说它属于半双工通信。 I²C 总线协议可参考总线(SDA和SCL)的时序进行理解: 通常包含:起始位、数据/地址、ACK、结束位。 1. 开始和停止 在时钟线保持高的情况下, SDA数据线由高 -> 低:为总线开始条件; 在时钟线保持高的情况下 ,SDA数据线由低 -> 高:为总线结束条件; 2. 地址 I2C地址分7位和10位。 7位地址: 10位地址: 3. 应答(ACK) 应答(ACK)和非应答(NACK)发生在每个字节之后,是由接收方向发送方发出确认信号,表明数据已成功接收,并且可以继续发送下一字节数据。 I2C 总线协议更多内容可参看: https://zh.wikipedia.org/wiki/I²C https://www.nxp.com/docs/en/user-guide/UM10204.pdf 嵌入式专栏 3 STM32 I2C常见问题 I²C 总线通信,通常不会像CAN、USB这类总线添加一些复杂的(软件)通信协议。I²C 虽然硬件和协议简单,但在实际应用中还是经常出现各种问题。下面就来分析一下常见的问题。 问题一:IO模式不对 有些工程师对用于I²C 总线的GPIO不了解,写驱动代码时把总线(SDA、SCL)配置成推挽输出模式,导致应用上的异常。 I²C 总线是一种特殊的总线,因为多器件需共用总线,加上数据线需支持双向通信。SDA要求开漏输出模式。由于开漏无法直接输出“高”时,需外加上拉电阻配合。 解决办法:STM32的IO有8种应用模式,如果你通过软件模拟I²C,并将SDA配置为开漏输出模式,配合上拉电阻。这往往适用于主模式器件。如果使用硬件I²C,则需要配置成开漏复用功能。建议使用STM32CubeMX工具配置底层初始化代码。 问题二:总线电压不匹配 I²C 总线电压通常为3.3V或5V。有的I²C C总线上挂的设备比较多,有可能存在特殊电压,比如2.5V,或者3.3V不兼容5V,就容易引起信号辨识错误导致总线通信失败的情况。 解决办法:如果存在电压不匹配的情况,需要从硬件方面来解决,比如:通过专业转换模块。 问题三:软件检测死机 I²C 总线一般通过ACK信号来判断总线的情况,STM32实现I²C 收发、检测等操作是由内部控制器自动完成。 然而由于一些外部因素,比如干扰信号、电压不匹配等,容易引起总线上的信号不正常,从而导致检测失败,通信失败。 解决办法:解决这种因异常引起的死机,除了从硬件方面做调整外,也可以从软件入手,常见的做法是添加超时处理机制,不要让程序一直死等检测应答信号。 比方当发送超时情形时,可以尝试复位STM32 I2C外设或相关设备。 复盘一下 ▼I²C 基础内容:主从模式特性、通信速度、寻址模式、收发模式; ▼I²C  总线协议:起始位、数据/地址、ACK、结束位; ▼I²C 常见问题:IO模式不对、总线电压不匹配、软件检测死机 ------------ END ------------ 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    时间:2021-03-03 关键词: 通讯总线 I2C STM32

首页  上一页  1 2 3 4 5 6 7 8 9 10 下一页 尾页
发布文章

技术子站