STM32

STM32是STMicroelectronics(意法半导体)推出的一系列基于ARM Cortex-M内核的32位微控制器(MCU)产品。这些微控制器提供了广泛的产品系列,覆盖了多种不同的性能和功能需求,适用于各种应用领域,包括工业控制、汽车电子、消费类电子、医疗设备等。

STM32系列微控制器以其高性能、低功耗、丰富的外设接口和灵活的开发工具而闻名。它们通常具有丰富的存储器、多种通信接口(如UART、SPI、I2C、CAN等)、模拟数字转换器(ADC)、定时器、PWM输出等功能,以满足不同应用场景下的需求。

STM32微控制器通常使用标准的ARM Cortex-M内核,包括Cortex-M0、M0+、M3、M4和M7等,这些内核具有不同的性能和功耗特性,可根据具体应用的需求进行选择。此外,STM32系列还提供了多种封装和引脚配置,以满足不同尺寸和集成度的要求。

STMicroelectronics为STM32系列提供了丰富的开发工具和支持资源,包括基于ARM开发环境的集成开发环境(IDE)、调试器、评估板和参考设计等。这些工具和资源有助于开发人员快速开发和部署他们的应用,并提供了全面的技术支持和文档资料,帮助用户充分发挥STM32微控制器的性能和功能优势。

早在2017年,国网就提出过“双芯”智能电表的研发。从2019年开始,包括国家电网在内的多个行业相关方密集讨论了有关下一代智能电表的技术、功能、标准等细则。2020年8月份,国家电网出台了智能电表新标准IR46,有望推动现有电表的升级改造和存量大规模轮换。

中国的电能表经历了机械式电表、普通电子式电表、预付费电表、智能电表四代的发展,下一代智能电表将在传统的计量业务之外,搭载更多的功能,可实现系统内业务(运维支撑、计量、有序用电管理)和泛在业务(全域电气消防、新能源接入、能效管理、水气数据采集、居室防盗、储能管理、其他应用等)。

“STM32

目前,我国2010-2017年投运的电表已开始进入密集更换时期。2021年,国网智能电表招标量达到6720多万台,较2020年增长29%。

泛在电力物联网驱动,新一代智能电表开启“双芯”模式

IR46新标准取消了不带通信模块、电池不可换的表型,同时增加通信(无线、蓝牙)、遥控(部分将增加微型断路器)等功能与要求。新电表不仅有计量功能,还需要支持一些管理功能。基于IR46理念的“双芯”智能电表,要求新一代智能电表采用“计量芯”和“管理芯”的双芯模式。

“▲
▲ 图1:IR46双芯智能电表设计结构

新一代智能电表为何要在新一代智能电表中,加入计量和管理功能?其背后的巨大驱动力量是势不可挡的泛在电力物联网。

“▲
▲ 图2:智能电表在泛在电力物联网建设中的应用场景

国家电网提出,2021年初步建成泛在电力物联网,第二阶段到2024年建成泛在电力物联网。感知层是泛在电力物联网的基础层和数据源,对发电、输电、变电、配电、用电等多个能源体系环节实现全面感知,进行精细化管理,便于定点监控,以提高新能源消纳、发电效率,工商业用户用能效率,加快实现电器和家电制造商节能降耗。电网智能化与信息化对电表等终端提出了新的要求和挑战。

智能电表是典型的感知层终端,是故障抢修、电力交易、客户服务、配网运行、电能质量监测等各项业务的基础数据来源。双芯的设计实现了电能计量与电能管理在硬件上的分离,这为未来新需求下软件升级留足了操作空间。

新一代智能电表在保证基本计量功能稳定、准确、可靠的前提下,从技术角度进行增强,增加了更多的灵活性、安全性以及可扩展性,以此来满足智能设备的接入,实现设备数据的感知、采集和控制功能,从而不断适应能源互联网的建设需求以及日益多样化的服务需求,从多个方面提供了强有力的大数据支撑。

新一代智能电表对用电信息进行精细化分解,提升用户安全智慧用电水平,指导用户科学有序用电、节电,跟进国家在低碳环保、节能减排的整体方针,促进用户与电网的友好互动。

电表行业巨变,新一代智能电表焕新颜

未来的智能电表已远非现在的模样,它更像个小型电脑,更加智能,有更多的存储、通信和感知、监测和管理能力,可归纳为以下七大特点:

首先,对大容量存储的需求激增。每个独立的模组都需要分配相应的存储空间,保存关键计量数据,能够存储长达一年的分钟级计量数据。

第二,实现低功耗与高性能的平衡。随着智能电表的功能增多,势必会需要更高性能的控制芯来处理这些功能,但是智能电表的基数如此之大,对于低功耗性能同样也需要严格要求,以期实现高性能与低功耗之间的平衡,实现节能减排的要求。

2021年新上市的超低功耗系列STM32U5拥有优异的低功耗性能,是STM32的低功耗旗舰产品,采用ARM-V8架构的Cortex-M33®内核,在安全性以及高性能上表现出色。

“▲
▲ 图3:基于STM32U5的IR46智能电表控制芯框图示例

“▲
▲ 图4:STM32U5的低功耗及安全性能适合计量仪表场景

第三,支持更多样化的无线通信技术。除了以往常用的RS485, CAN等有线通信,还增加了更多的无线物联网通信技术,比如:

  • BLE实现了数据的读取、无线配置等功能。

  • NB-IOT,LoRa实现了远程的抄表,指令下达等功能。

  • 增强了智能电表的实时数据处理和传输能力,能够更好的实现能耗分配优化。

STM32五大系列中的无线型微控制器包括STM32WB和STM32WL两个系列,可以无缝支持智能电表的 BLE和LoRa通信。

适用于无线短距离通信的STM32WB系列支持2.4GHz频段,包含BLE5.2®, ZIGBEE3.0® ,Openthread®等多种通信协议。该系列采用双核架构,Cortex-M4®控制核用来处理事件,特有射频协处理器Cortex-M0+®核则“专职”处理射频相关功能,双核架构除了可以带来更好的实时处理能力之外,还可以实现更好的安全性能(双核硬件隔离)以及更低的功耗性能。得益于BLE技术的导入,STM32WB系列产品可实现OTA升级、缴费、参数配置等多方面的扩展服务,被智能电表行业用户广泛认可。

“▲
▲ 图5:STM32WB系列架构图解

“▲
▲ 图6:STM32WB系列可支持多种短距离通信协议

面向无线远程通信的STM32WL系列支持Sub-GHz频段,包含LoRa®,Sigfox®,M-bus®等多种通信协议。作为全球首款支持LoRa®的SoC解决方案,得益于STM32WL系列在集成度,频段覆盖,内部资源等方面的优异特性,不仅可大大降低了PCB的占用面积,因其支持全球全频段的覆盖、内置的双路PA等优势,也可大幅降低BOM成本。

“▲
▲ 图7:STM32WL系列架构图解

“▲
▲ 图8:STM32WL系列支持多种长距离通信协议,其中LoRa应用

第四,对宽范围负载电流进行精准计量,以满足新能源电动汽车等大功率、宽范围负载的计量需求。

第五,拥有对用电异常感知的监测功能,增加了更多的传感器来实现对电网、电表以及用电的异常事件的故障定位、主动上报功能。

这一功能与嵌入式AI应用场景高度耦合。STM32Cube.AI是广泛使用的STM32CubeMX配置与代码生成工具,可在STM32微控制器及微处理器上使用,可以自动转换和优化预先训练的神经网络模型并将生成的优化库集成到用户项目中。NanoEdge AI Studio是一款面向嵌入式开发人员的实用程序,可以在同一设备上进行学习和推理。这两款AI工具,为STM32在无线抄表和设备异常检测等应用场景中赋能。

“▲
▲ 图9:STM32Cube.AI 可支持边缘AI应用场景

第六,功能可扩展性以及操作系统的应用,满足了对终端处理能力、性能以及冗余设计的要求。

第七,系统安全性、可靠性的需求提高。

一方面,智能电表需要对敏感信息、敏感数据的传输进行防护,STM32提供了大量的功能安全和信息安全方面的功能特性,可以为设备性能和数据安全保驾护航;

“▲
▲ 图10:STM32Trust为信息安全赋能

另一方面,智能电表7*24小时的长时间运行需要更高可靠性,STM32工业级MCU的品质保证得到了完美诠释。

“▲
▲ 图11:STM32功能安全检测为产品可靠性保驾护航

保电护航,STM32深入电表延伸场景

新一代智能电表应用中,除了电表本身,还有大量的采集器,集中器,DTU,微型断路器等产品,都属于新一代智能电表的范围之内。STM32通过其广泛的产品线、强大的生态系统以及为电表度身定制的解决方案和服务,在推动新型智能电表应用方面扮演了重要角色。

依据国网电科院13规约中的集中器型式规范,低压集中器按功能分为集中器I型和集中器II型。两种型号在尺寸、显示、通信接口等性能要求不同。

STM32在集中器I型和集中器II型均有适用解决方案:

STM32MP1系列是“可以跑Linux的STM32”,在集中器和DTU/FTU市场上应用广泛。该系列具备双核/三核异构架构,主频高达800MHz,Cortex-A7核运行Linux,主频为209MHz的Cortex-M4内核进行实时应用处理,高度契合 I型集中器的应用需求。

“▲
▲ 图12:基于STM32MP1的I型集中器框图

“▲
▲ 图13:STM32MP1产品系列选型

针对II型集中器的规范需求,STM32可提供基于STM32F4的成熟解决方案。

“▲
▲ 图14:基于STM32F4的II型集中器框图

微型断路器可为电气设备提供可靠的过载和短路保护,确保设备安全可靠运行。

超高性价比的STM32G0系列采用了全新的设计平台,减少电源对的使用,在相同封装下可以提供更高的GPIO使用率(高达93%);其SON-8, TSSOP-20的小型封装,非常适合小型化产品的使用需求;支持最高环境温度125°,完全可以满足断路器的使用要求。

“▲
▲ 图15:基于STM32G0的微型断路器框图

“▲
▲ 图16:STM32G0选型指南

STM32生态助力电表开发设计快速迭代

产品全、生态好、本地资源丰富,一直以来是STM32拓展市场的三大法宝。

STM32历经15年的不断探索和发展,坚持多平台迭代更新,各平台之间即互相补充又具备可移植性的产品策略,拥有5大产品系列、18个子系列、近2000个产品,涵盖微处理器、高性能MCU、主流MCU,超低功耗MCU以及无线MCU,可满足电表行业多种应用场景。

“▲
▲ 图17:STM32产品全景图

电表新标准IR46提升了行业门槛,新一代智能电表的功能模块更多、技术难度更高,STM32通过丰富、可延续的生态系统帮助表计客户快速实现技术迭代。

从软件生态来说,STM32的多平台演进始终基于STM32生态系统,代码的复用性、延续性及易用性很高,减少客户开发周期和难度,降低重复工作量。

从硬件生态来说,STM32提供了大量硬件开发板资源。从简单灵活的Nucleo板,到关键功能验证的DK板,再到全功能评估的Evaluation板,应有尽有。

“▲
▲ 图18:STM32生态概览

STM32中国团队非常重视本地化资源建设,为用户提供了大量技术资料,通过年度STM32峰会和全国研讨会、线下面对面的培训和动手实验、线上培训视频课程、社区/技术论坛等多种方式,最大程度地贴近用户。

“▲
▲ 图19:STM32本地化资源

来源:STM32
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 422

队列的概念

在此之前,我们来回顾一下队列的基本概念:

队列 (Queue):是一种先进先出(First In First Out ,简称 FIFO)的线性表,只允许在一端插入(入队),在另一端进行删除(出队)。

队列的特点

“STM32进阶之串口环形缓冲区实现"

“STM32进阶之串口环形缓冲区实现"

类似售票排队窗口,先到的人看到能先买到票,然后先走,后来的人只能后买到票

队列的常见两种形式

“STM32进阶之串口环形缓冲区实现"

普通队列

“STM32进阶之串口环形缓冲区实现"

在计算机中,每个信息都是存储在存储单元中的,比喻一下吧,上图的一些小正方形格子就是一个个存储单元,你可以理解为常见的数组,存放我们一个个的信息。

当有大量数据的时候,我们不能存储所有的数据,那么计算机处理数据的时候,只能先处理先来的,那么处理完后呢,就会把数据释放掉,再处理下一个。那么,已经处理的数据的内存就会被浪费掉。因为后来的数据只能往后排队,如过要将剩余的数据都往前移动一次,那么效率就会低下了,肯定不现实,所以,环形队列就出现了。

环形队列

“STM32进阶之串口环形缓冲区实现"

它的队列就是一个环,它避免了普通队列的缺点,就是有点难理解而已,其实它就是一个队列,一样有队列头,队列尾,一样是先进先出(FIFO)。我们采用顺时针的方式来对队列进行排序。

队列头 (Head) :允许进行删除的一端称为队首。

队列尾 (Tail) :允许进行插入的一端称为队尾。

环形队列的实现:在计算机中,也是没有环形的内存的,只不过是我们将顺序的内存处理过,让某一段内存形成环形,使他们首尾相连,简单来说,这其实就是一个数组,只不过有两个指针,一个指向列队头,一个指向列队尾。指向列队头的指针(Head)是缓冲区可读的数据,指向列队尾的指针(Tail)是缓冲区可写的数据,通过移动这两个指针(Head) &(Tail)即可对缓冲区的数据进行读写操作了,直到缓冲区已满(头尾相接),将数据处理完,可以释放掉数据,又可以进行存储新的数据了。

实现的原理:初始化的时候,列队头与列队尾都指向0,当有数据存储的时候,数据存储在‘0’的地址空间,列队尾指向下一个可以存储数据的地方‘1’,再有数据来的时候,存储数据到地址‘1’,然后队列尾指向下一个地址‘2’。当数据要进行处理的时候,肯定是先处理‘0’空间的数据,也就是列队头的数据,处理完了数据,‘0’地址空间的数据进行释放掉,列队头指向下一个可以处理数据的地址‘1’。从而实现整个环形缓冲区的数据读写。

“STM32进阶之串口环形缓冲区实现"

看图,队列头就是指向已经存储的数据,并且这个数据是待处理的。下一个CPU处理的数据就是1;而队列尾则指向可以进行写数据的地址。当1处理了,就会把1释放掉。并且把队列头指向2。当写入了一个数据6,那么队列尾的指针就会指向下一个可以写的地址。

“STM32进阶之串口环形缓冲区实现"

如果你懂了环形队列,那就一步步用代码实现吧:

从队列到串口缓冲区的实现

串口环形缓冲区收发:在很多入门级教程中,我们知道的串口收发都是:接收一个数据,触发中断,然后把数据发回来。这种处理方式是没有缓冲的,当数量太大的时候,亦或者当数据接收太快的时候,我们来不及处理已经收到的数据,那么,当再次收到数据的时候,就会将之前还未处理的数据覆盖掉。那么就会出现丢包的现象了,对我们的程序是一个致命的创伤。

那么如何避免这种情况的发生呢,很显然,上面说的一些队列的特性很容易帮我们实现我们需要的情况。将接受的数据缓存一下,让处理的速度有些许缓冲,使得处理的速度赶得上接收的速度,上面又已经分析了普通队列与环形队列的优劣了,那么我们肯定是用环形队列来进行实现了。下面就是代码的实现:

①定义一个结构体:

1typedef struct
2{
3    u16 Head;          
4    u16 Tail;
5    u16 Lenght;
6    u8 Ring_Buff[RINGBUFF_LEN];
7}RingBuff_t;
8RingBuff_t ringBuff;//创建一个ringBuff的缓冲区

②初始化结构体相关信息:使得我们的环形缓冲区是头尾相连的,并且里面没有数据,也就是空的队列。

 1/**
 2* @brief  RingBuff_Init
 3* @param  void
 4* @return void
 5* @author 杰杰
 6* @date   2018
 7* @version v1.0
 8* @note   初始化环形缓冲区
 9*/
10void RingBuff_Init(void)
11{
12   //初始化相关信息
13   ringBuff.Head = 0;
14   ringBuff.Tail = 0;
15   ringBuff.Lenght = 0;
16}

初始化效果如下:

“STM32进阶之串口环形缓冲区实现"

写入环形缓冲区的代码实现:

 1/**
 2* @brief  Write_RingBuff
 3* @param  u8 data
 4* @return FLASE:环形缓冲区已满,写入失败;TRUE:写入成功
 5* @author 杰杰
 6* @date   2018
 7* @version v1.0
 8* @note   往环形缓冲区写入u8类型的数据
 9*/
10u8 Write_RingBuff(u8 data)
11{
12   if(ringBuff.Lenght >= RINGBUFF_LEN) //判断缓冲区是否已满
13    {
14      return FLASE;
15    }
16    ringBuff.Ring_Buff[ringBuff.Tail]=data;
17//    ringBuff.Tail++;
18    ringBuff.Tail = (ringBuff.Tail+1)%RINGBUFF_LEN;//防止越界非法访问
19    ringBuff.Lenght++;
20    return TRUE;
21}

读取缓冲区的数据的代码实现:

 1/**
 2* @brief  Read_RingBuff
 3* @param  u8 *rData,用于保存读取的数据
 4* @return FLASE:环形缓冲区没有数据,读取失败;TRUE:读取成功
 5* @author 杰杰
 6* @date   2018
 7* @version v1.0
 8* @note   从环形缓冲区读取一个u8类型的数据
 9*/
10u8 Read_RingBuff(u8 *rData)
11{
12   if(ringBuff.Lenght == 0)//判断非空
13    {
14       return FLASE;
15    }
16   *rData = ringBuff.Ring_Buff[ringBuff.Head];//先进先出FIFO,从缓冲区头出
17//   ringBuff.Head++;
18   ringBuff.Head = (ringBuff.Head+1)%RINGBUFF_LEN;//防止越界非法访问
19   ringBuff.Lenght--;
20   return TRUE;
21}

对于读写操作需要注意的地方有两个:

1:判断队列是否为空或者满,如果空的话,是不允许读取数据的,返回FLASE。如果是满的话,也是不允许写入数据的,避免将已有数据覆盖掉。那么如果处理的速度赶不上接收的速度,可以适当增大缓冲区的大小,用空间换取时间。

2:防止指针越界非法访问,程序有说明,需要使用者对整个缓冲区的大小进行把握。

那么在串口接收函数中:

1void USART1_IRQHandler(void)  
2{
3   if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断
4                   {
5           USART_ClearITPendingBit(USART1,USART_IT_RXNE);       //清楚标志位
6           Write_RingBuff(USART_ReceiveData(USART1));      //读取接收到的数据
7       }
8}

测试效果

“STM32进阶之串口环形缓冲区实现"

测试数据没有发生丢包现象

补充

对于现在的阶段,杰杰我本人写代码也慢慢学会规范了。所有的代码片段均使用了可读性很强的,还有可移植性也很强的。我使用了宏定义来决定是否开启环形缓冲区的方式来收发数据,移植到大家的代码并不会有其他副作用,只需要开启宏定义即可使用了。

 1#define USER_RINGBUFF  1  //使用环形缓冲区形式接收数据
 2#if  USER_RINGBUFF
 3/**如果使用环形缓冲形式接收串口数据***/
 4#define  RINGBUFF_LEN          200     //定义最大接收字节数 200
 5#define  FLASE   1
 6#define  TRUE    0
 7void RingBuff_Init(void);
 8u8 Write_RingBuff(u8 data);
 9u8 Read_RingBuff(u8 *rData);
10#endif

当然,我们完全可以用空闲中断与DMA传输,效率更高,但是某些单片机没有空闲中断与DMA,那么这种环形缓冲区的作用就很大了,并且移植简便。同时大家也可以参考下下面这篇Gokit3.0 STM32源代码分析,会对这个机制理解更深。

说明:文章部分截图来源慕课网james_yuan老师的课程
来源:
硬件攻城狮
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 324

01、正点原子157开发板介绍

STM32MP1是ST推出的首款Cortex-A系列MPU,整个MP1系列分为三大类:MP151、MP153和MP57,其中MP157是家族中最为强大的一款芯片。其中STM32MP157DAA3是整个MP1的旗舰级芯片,采用异构多核架构,包含两个800M的Cortex-A7内核、一个209M的M4内核,带有一个3D GPU,支持OpenGL ES 2.0,RGB接口屏幕最高支持1366*768 60fps。

STM32MP1系列完美的继承了STM32F7/H7的相关外设资源,可以看做是一个换核版的STM32H7,因此如果会STM32单片机的话就会很容易切换到STM32MP1的开发,这也是行业对于STM32MP1如此期待的主要原因。Cortex-A7可以跑Linux,完成复杂的应用软件开发,M4内核可以运行FreeRTOS系统,完成实时应用的开发。对于学习者而言,可以通过MP1一块板子来完成Linux和单片机的学习。

正点原子STM32MP157开发板采用底板+核心板的形式。STM32MP157核心板资源图,如下所示:

“▲图1.1.1
▲图1.1.1 核心板资源图

STM32MP157核心板的外形尺寸为60mm*45mm大小,非常小巧,并且采用了贴片板对板连接器,使得其可以很方便的应用在各种项目上。

正点原子STM32MP157核心板板载资源如下:

  • CPU:STM32MP157DAA1,双核A7+单核M4,A7主频800MHz,M4主频209MH,LFBGA448封装。

  • 外扩DDR3L:2片16为DDR3,总容量为1GB(2×512MB),位宽32位(2×16)。

  • EMMC:8GB字节。

  • 两个2*50的防反插BTB座,共引出144个GPIO以及35个其他功能引脚。

STM32MP157开发板底板资源图如下所示:

“▲图1.1.2
▲图1.1.2 MP157全功能开发板介绍

可以看出,STM32MP157开发板底板资源十分丰富,把STM32MP157的内部资源发挥到了极致,基本上STM32MP157内部所有的资源都可以在此开发板上验证,同时扩充丰富的接口和功能模块,开发板的外形尺寸为181mm*125mm大小。

正点原子STM32MP157开发板底板板载资源如下:

  • 1个核心板接口,支持STM32MP157核心板

  • 1个电源指示灯(蓝色)

  • 2个状态指示灯(红色和绿色,用户可以使用)

  • 1个六轴(陀螺仪+加速度)传感器芯片,ICM20608

  • 1个高性能音频编解码芯片,CS42L51

  • 1路CAN FD接口,采用MCP2526FDT芯片

  • 1路485接口,采用SP3485芯片

  • 1路RS232串口(母)接口,采用SP3232芯片

  • 1路RS232串口(公)接口,采用SP3232芯片

  • 1个ATK模块接口,支持正点原子蓝牙/GPS/MPU6050/手势识别等模块

  • 1个光环境传感器(光照、距离、红外三合一)

  • 1个摄像头模块接口

  • 1个OLED模块接口

  • 1个USB串口,可用于代码调试,Type-C接口类型

  • 1个USB OTG接口,用于USB从机通信,Type-C接口类型

  • 6个USB HOST接口,用连接USB设备

  • 1个有源蜂鸣器

  • 1个RS232/RS485选择接口

  • 1个RS232/ATK模块选择接口

  • 1个串口选择接口

  • 1个TF卡接口

  • 1个10M/100M/1000M以太网接口(RJ45)

  • 1个录音头(MIC/咪头)

  • 1路耳机接口,支持4段式耳机

  • 1个小扬声器(在板子背面)

  • 1组5V电源供应/接入口

  • 1组3.3V电源供应/接入口

  • 1个直流电源输入接口(输入电压范围:DC6~16V)

  • 1个启动模式选择配置接口

  • 1个RTC后备电池座,并带电池

  • 1个复位按钮,可用于复位MPU和LCD

  • 3个功能按钮

  • 1个电源开关,控制整个板的电源 

  • 1个Mini PCIE 4G模块接口

  • 1个Nano SIM卡接口

  • 1个SDIO WIFI&BT模块,板载

  • 1个WIFI&BT天线接口,板载

  • 1个HDMI接口

  • 1个JTAG调试接口,可以调试M4内核

  • 1个SPDIF光纤音频接收接口

  • 1个SPDIF光纤音频发送接口

  • 1个可调电位器,用于ADC测试

  • 1个4P的圆孔排座,可以接DHT11或DS18B20温湿度传感器

  • 1个2×22P,2.54mm间距的排针,引出44个IO,用户可自行使用

“STM32

02、文档教程资料

正点原子10年嵌入式教育经验,对于嵌入式文档教程有着极高的要求,教程编写以及视频录制讲师多则7,8年教育经历,少则4,5年,均参与正点原子多款开发板的教程编写以及视频录制。STM32MP157开发板是集正点原子10年教育经验的大作。

STM32MP157采用Cortex-M4加A7的双核异构架构,既可以通过STM32MP157学习STM32单片机,又可以学习嵌入式Linux,一板两用!极大的方便了学习者。针对STM32MP157开发板,既要编写Cortex-M4裸机教程,又要编写嵌入式Linux教程。截止目前为止,正点原子已经编写完成6份详尽的开发教程以及10份开发笔记。

丰富的教程以及开发笔记

目前已经发布了6份,总计5440多页,并且还在不断的更新中!教程资料如下:

“STM32

另外还有10份其他开发笔记,如下图:

“STM32

这些教程从开发板拿到手以后如何测试,一直到linux驱动开发、应用开发,堪称保姆级教程。真正手把手教你学嵌入式,从环境搭建,ubuntu入门,到嵌入式linux驱动开发,完善、详细的教程,降低学习难度。

03、例程源码

出厂系统全部开源

正点原子开发板全部开源,TF-A、uboot、kernel、QT综合界面,全部免费开源!方便大家学习、开发。

“STM32

Cortex-M4裸机例程

针对STM32MP157的M4内核,我们提供了传统的MDK+HAL库版例程,也提供了CubeIDE+HAL库的例程。

MDK+HAL库一共有46个实验,基本涵盖了MP1的M4内核所有的外设实验。

“STM32

针对CubeIDE+HAL一共提供了36个实验:

“STM32

FreeRTOS例程

针对MP1的M4内核,提供了23个FreeRTOS例程:

“STM32

linux驱动例程

目前提供了35个linux驱动例程,还在更新中:

“STM32

嵌入式Linux C应用开发例程

针对嵌入式Linux应用开发,我们提供了19个应用开发例程:

“STM32

QT开发例程

正点原子MP157开发板出厂有精美的UI界面,为QT编写,界面全部开源,提供了EGL和FB两个版本,方便大家学习使用。

“STM32

egl和fb只是针对不同的根文件系统,UI界面是完全一样的。正点原子每个QT APP都是独立的例程,大家可以根据实际需求查看,学习对应的APP:

“STM32

04、资料下载链接

正点原子STM32MP157开发板所有资料均免费开源,下载地址为:

http://www.openedv.com/docs/boards/arm-linux/zdyzmp157.html

来源:STM32
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 1326

STM32F103默认最高主频为72M,其主频可以达到80M吗? 假如达到80M,程序能正常运行吗?

关于MCU主频

首先,还是简单介绍一下MCU主频。一般我们讲的电脑CPU主频,对于MCU来说,其实道理一样,都是指的CPU内核工作的时钟频率。

对于STM8、STM32来说,MCU的主频由硬件(晶振)和软件编程决定。

在STM32中,MCU主频一般是通过倍频来实现的。比如:72M,等于8M时钟,9倍频(8 x 9 = 72)。

在STM8、32中,我们说的主频时钟和外设时钟,其实是两种不同时钟。

查看MCU「参考手册」STM8的CLK时钟控制章节,STM32的RCC复位和时钟控制章节的时钟树一目了然。

STM8主频时钟

在STM8「参考手册」Clock control(CLK)时钟控制章节,详细描述了STM8时钟相关的内容。

从时钟树可以清晰看的出STM8时钟大概有哪些内容。比如STM8S的时钟树:

“STM32可以超频吗?"

从时钟树可以看的出,可以得出一些重要信息,如:

  • 内部高速晶振HSI默认16M,外部晶振可选择1 - 24M。
  • STM8主频只能分频,不能倍频
  • 外设时钟是由主频时钟而来,可单独开启。
  • 时钟频率可选择多种方式输出(CCO)。

STM8主频可以大于16M吗? 这个问题是之前有朋友问过的问题。

当然,答案肯定是可以。为了提高MCU效率,很多人就是将主频进行提高来达到目的。

但是,这里需要注意一个问题:当超过16M主频时钟时,Flash /data EEPROM访问必须配置为1等待状态。

这个在STM8「参考手册」中有明确说明:

For clock frequencies above 16 MHz, Flash /data EEPROM access must be configured for 1 wait state. This is enabled by the device option byte. Refer to the datasheet option bytesection.

STM32主频时钟

STM32主频时钟同样也是由硬件(晶振)和软件编程决定。

“(STM32F1时钟树)"
(STM32F1时钟树)

STM32的时钟可以上面时钟树看得出来,相对STM8要复杂的多。以上还只是STM32F1的,像F4,F7的还更复杂。

从时钟树可以看得出,STM32外部晶振频率是一个范围值,一般硬件就要求在这个范围以内。

STM32一个显著的特点就是增加了倍频这个功能。如果没有倍频功能,我们使用的72M、168M这么高的频率,就需要直接使用上百兆的晶振。

这么能实现吗? 原理上来说,可以实现。但对MCU来说是一个不小的考验。具体原因可能就要问相关的资深工程师了。

1、STM32倍频

STM32的倍频可通过配置对应寄存器(也就是编程)来实现。但一般不建议自己直接通过配置寄存器来实现,参考官网提供例程代码即可。

标准外设库例程:在执行main函数之前,系统就会调用SystemInit函数进行初始化系统时钟(含主频)。

如果外部晶振和例程不一样,修改对应的几个参数即可。比如倍频值,HSI值等。这个阅读一下代码就能明白。

HAL库:可通过STM32CubeMX工具直接配置时钟,简单方便,时钟树勾选一目了然。

“STM32可以超频吗?"

2、主频能超过最大值吗?

如开篇所说,STM32F1主频能超过最大的72M吗?答案是可以的。

但是,超过最大主频,有可能存在潜在的风险。比如:时序紊乱,程序跑飞等。

超频工作需要考虑实际情况和环境因素。比如干扰特别大的环境,一般不建议超频。

我是亲自经历过的,之前公司产品为了提高效率,将主频超过一定值,还是能正常运行,而且投产了的。但是,应用环境相对比较好,而且产品有电源控制(接断电复位)。

3、超频死机

如果MCU主频超过太多,就会导致程序跑飞,出现死机现象,只能通过工具重新固件。

这个时候直接下载,可能会出现错误,则可借助复位引脚来实现重新下载固件(按住复位引脚,点击下载,释放按键)。

说了这些,主要想强调,只要没有特殊要求,建议参考官网硬件和软件。

来源:嵌入式专栏(作者 | strongerHuang)
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 143

页面

订阅 RSS - STM32