MCU

在MCU程序开发调试过程中,总会发现很多的程序bug。有一些bug是逻辑问题,规格书理解问题,笔误问题等,以上列出的这些问题,通过断点,单步等调试手段,很容易发现并解决问题。但是有一些程序的bug就比较难通过常规手段定位出问题的地点和原因,例如:芯片不定时跑飞和复位。

以下总结了芯片不定时跑飞和复位的5大原因

1、看门狗复位

原因:程序中使用了看门狗,但是没有及时清看门狗,从而导致看门狗复位,使程序直接跳到复位位置。

解决方法:通过读或写RSTSTAT寄存器,在程序中清看门狗。

示例:

A.程序中写RSTSTAT寄存器清看门狗。

“中颖8bit

2、中断服务程序缺失

原因:程序中打开了某个中断,但是没有相应的中断服务程序,从而导致在中断发生后,找不到中断服务程序入口,从而导致程序跑飞。

解决方法:检查程序中是否存在打开了某个中断,但是没有相对应的中断服务程序。

示例:

A.使能外部中断0,并且屏蔽外部中断0服务程序。

“中颖8bit

“中颖8bit

B.下降沿触发外部中断0后,程序跑到地址0x0003处(INT0向量地址为0x0003),由于没有中断服务程序,该地址的指令被编译器填充为初始化程序,因此导致程序跑飞。

“中颖8bit

3、 中断服务程序没有对bank压栈和出栈

原因:主程序在操作bank1寄存器时,进入中断没有对bank1压栈,此时切换到bank0对寄存器操作,退出中断后由于没有保存bank1的状态,导致主程序在bank0中对bank1的寄存器操作,误改bank0寄存器的值,程序可能会运行异常。

解决方法:进入中断服务程序后,对bank进行压栈,退出中断之前对bank进行出栈,这样无论主程序在操作bank0还是bank1,中断里面都会保存进中断之前bank状态,退出中断后会还原bank状态,这样就不会因为切换bank导致寄存器的值被误改。

示例:

A.在主循环操作bank1寄存器,定时器Timer3中断里面不进行压栈和出栈操作,直接操作bank0寄存器。

“中颖8bit

B.退出中断后此时程序状态为bank0,下一步返回主程序,本来应该改变的是P5_0的值,由于没有切换到bank1,所以在bank0中将相同地址的寄存器P0_0的值误改,同时导致P5_0的值修改无效。

“中颖8bit

“中颖8bit

“中颖8bit

4、数组越界

原因:程序中定义的数组元素的个数小于程序中实际使用的数组元素的个数,数组使用循环函数时,如果循环变量没控制好则会出现数组越界,意外修改其他变量值可能会导致程序异常。
解决方法:检查函数中调用的数组是否存在越界的情况。

示例:

A.定义SendBuffer和RecBuffer两个数组变量,数组长度为5,初值均为0。

“中颖8bit

B.主程序中对数组SendBuffer[0]~ SendBuffer[4]赋值,此时SendBuffer[5]和SendBuffer[6]也被意外赋值,从watch窗口可以看出,这两个值改变了原来RecBuffer[0]和RecBuffer[1]的值,可能会造成程序异常。

“中颖8bit

“中颖8bit

5、堆栈溢出

原因:函数嵌套太深或者局部变量太多导致超出堆栈空间,正常数据被改写。

解决方法:尽量减少函数调用层级,局部变量不要使用太多,尤其是局部大数组,从而减少压栈的时候所需的空间。
示例:

A.定义4个全局变量和1个局部变量数组,总共占用RAM空间为249个字节

“中颖8bit

“中颖8bit

B.计算程序中所需的堆栈大小,主程序中调用Delay()函数,占用2个字节,中断服务函数占用16个字节,中断嵌套调用leddisplay()函数,占用2个字节,总共需要20个字节堆栈空间,由A可知,系统只剩下6个字节堆栈空间,所以程序运行后,堆栈一定会溢出。

“中颖8bit

“中颖8bit

“中颖8bit

C.运行程序,正常现象为P40端口一直翻转,TestData变量值始终为0,触发外部中断0,进入中断服务程序后,可以看到SP堆栈指针已经溢出,同时将R7寄存器的值压栈到0x08的地址上,通过.m51文件可以查到0x08正好是TestData变量地址,所以TestData的值被误改为0x01,导致主程序中条件判断出错,程序异常。

“中颖8bit

“中颖8bit

“中颖8bit

“中颖8bit

在调试MCU程序过程中,由于程序书写的不规范产生程序漏洞,跑飞现象比较常见,如果我们提前了解程序可能跑飞的原因,对于快速定位问题有很大帮助,从而提高分析和解决问题的效率,减少产品的开发周期,加速产品的上市时间。

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

围观 8

对于物联网的应用或者产品版本管理等场合,芯片的信息读取是用户非常关心的问题。本文介绍了瑞萨RL78家族单片机读取Device Part Number和Unique ID的方法。

1、读出产品型号

RL78族的产品型号是使用ASCII码编写的,被保存在Code Flash的特定区域内。使用软件读取该区域,可以读出产品的型号。具体请点击链接查看应用笔记参考:https://www2.renesas.cn/cn/en/document/apn/rl78-family-software-based-part-number-reading-out-rev100

根据指令类型、时钟数目和性能,RL78单片机可以分为三种类型:RL78-S1内核、RL78-S2内核和RL78-S3内核。本文中的内容只适用于RL78-S2内核和RL78-S3内核的产品。

  • RL78-S1内核产品:RL78/G10

  • RL78-S2内核产品:RL78/G12、RL78/G13、RL78/G1A、RL78/G1E、RL78/G1C、RL78/I1A、RL78/F12、RL78/D1A、RL78/L12、RL78/L13等。

  • RL78-S3内核产品:RL78/G11、RL78/G14 、RL78/G23等。

RL78-S2内核和RL78-S3内核产品的存放产品型号的区域地址 为0xEFFD5~0xEFFDE。

表1.1中列出了RL78/G13“R5F100LE”的产品型号。产品型号是用ASCII码编写的。

“关于RL78

读出产品型号的代码参考如下。执行该代码,可以读出用ASCII码编写的产品型号。被读出的产品型号保存在内部RAM中。

unsigned char __far* ptr; 

unsigned char sig[10]; 

unsigned char i; 

ptr = (unsigned char __far*)0xEFFD5; 

for (i = 0; i < 10; i++) 

{ 

    sig[i] = *ptr; 

    ptr++; 

}

下图所示为RL78/G13的运行结果,用户可通过“Watch”窗口得到产品型号的读出结果。

“关于RL78

2、读出Unique ID

2.1 Unique ID Driver

官方提供的Unique ID Driver只可用于RL78/G2x,具体请扫描下方二维码查看应用笔记参考。(需要登陆后查看)

https://www2.renesas.cn/cn/en/oauth2/default/v1/authorize?client_id=0oa2ixjskq8o2hdJB357&response_type=code&scope=openid%20email%20phone%20profile%20MyRenesasUserInfo&redirect_uri=https%3A//www2.renesas.cn/openid-connect/renesas-okta&state=qnG56-01fbiD6dPWyz7nlu1JkA1-mSn0O3VwVh6w1Fk

  • Unique ID是分配给单个产品并存储在非编址区域中的唯一值。

    • 在制造MCU时每个产品都会获得一个Unique ID。 

    • 该Unique ID无法再被更改。

    • Unique ID的数据长度为16字节(128位)。

  • Unique ID的区域地址为 0xEFFC0~0xEFFCF。

Unique ID读取驱动文件位于应用笔记例程的libsrc下,文件结构如表2.1和图2.1所示。表2.1列出了每个文件的作用。文件结构的相关部分包含在图2.1中的红色框中。

“关于RL78

“图2.1
图2.1 驱动程序文件结构

表2.2列出了Unique ID读取驱动的API函数

“关于RL78

以下是使用RL78/G23 FPB读取Unique ID的参考示例,设备连接图如下图所示。

“图2.2
图2.2 RL78/G23 FPB设备连接图

设置和执行步骤:

a)将PC的USB端口连接到RL78/G23 FPB的micro USB端口,如图所示在图2.2中,RL78/G23 FPB设备连接图。

b)在PC上启动终端仿真程序(终端软件)。然后选择分配给USB串行转换器板的串行COM口。

c)在终端软件中进行串行通信设置以匹配示例应用程序:115,200 bps,8个数据位,无奇偶校验,1个停止位,无流量控制。

d)构建示例应用程序,将其下载到RL78/G23 FPB上,并使用调试器运行应用程序。

e)软件运行时,将Unique ID和产品名称输出到终端,之后程序正常终止。

“关于RL78

调试注意事项:无法使用调试器的内存浏览器查看存储Unique ID和产品名称ASCII代码的闪存区域,在Memory Browser窗口中,只能看到该区域显示为全FFH。

“关于RL78

2.2 除RL78/G23以外的RL78产品配置Unique ID的方法

对于除RL78/G23以外的其他RL78产品,可以通过一些算法获得唯一ID,然后烧录到ROM中的一个空的固定地址。软件可以设置命令到该地址读取该ID。使用Renesas Flash Programmer(RFP)软件的图形化界面,可以实现在烧录bin文件的同时写入配置好的Unique ID。

“关于RL78

有关详细信息,请点击下方链接查看参阅用户手册第3章。

https://www2.renesas.cn/cn/en/document/mat/renesas-flash-programmer-v205-flash-memory-programming-software-users-manual-common

“关于RL78

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

围观 9

中颖很多8位MCU产品支持外部32.768kHz晶振,用作系统低频时钟和RTC时钟。有几个常用的控制寄存和代码选项与32.768kHz晶振电路相关,下文以SH86F7088举例逐一说明。

1、32K_SPDUP

32K_SPDUP是32.768kHz晶振加速模式控制位,位于时钟控制寄存器(CLKCON)的最高位,上电默认是使能状态。只有代码选项OP_OSC选择了32.768kHz晶体振荡器,此控制位才有效。

此寄存器位在系统发生任何形式的复位,如上电复位、看门狗复位等时,自动由硬件置1(使能),用以加速32.768kHz振荡器起振,缩短起振时间。

如果有需要,本位也可以由软件置1(使能)或者清0(关闭)。比如进入掉电模式前,可以将此位置1,掉电模式唤醒后再由软件清0。

使能此位后,会增加一点系统功耗。在低功耗应用中,可以关闭32.768kHz加速模式(此位清0)以节省系统耗电。

2、OP_32KDRIVE

OP_32KDRIVE是用户代码选项,用于使能晶振电路的强驱模式。在此模式下,晶振电路的抗湿度能力会显著增强,但功耗也会相应增加。此代码选项的初始默认设置是普通模式。

为了方便程序控制强驱模式,IC还设计了一个寄存器控制位(32K_DRIVE),功能同此代码选项相同。

备注:

(1) 使能强驱模式时,晶振匹配电容不能小于15pF;

(2)一旦使能强驱模式,即使没有使用外部32K晶振,增加的功耗也会持续存在。

3、32K_DRIVE

32K_DRIVE是32.768kHz晶振强驱模式的寄存器控制位,位于时钟控制寄存器(CLKCON)的bit 1,复位初始值由代码选项OP_32KDRIVE给出。只有代码选项OP_OSC选择了32.768kHz晶体振荡器,此控制位才有效。

寄存器控制位32K_DRIVE和代码选项OP_32KDRIVE的功能相同,都是强驱模式控制位,但是它们的有效范围有一些区别:

(1) IC复位后,OP_32KDRIVE有效,强驱模式受代码选项控制,此时32K_DRIVE的初始值同OP_32KDRIVE的值。

(2) 用户用程序修改32K_DRIVE的值后,32K_DRIVE生效,强驱模式受寄存器位控制。此时OP_32KDRIVE无效,直到发生系统复位后才再次生效。

4、OP_32KLCAP

OP_32KLCAP是用户代码选项,用于配置芯片内建的32.768kHz晶振匹配电容,初始默认设置是选择12pF内建电容。

内建匹配电容用于替代片外匹配电容,可以精简BOM。如果要使用片外匹配电容,需要用此代码选项关闭内建匹配电容。内建匹配电容有7档可选,容值范围8~25pF,容值最大偏差±15%。

为了方便程序选择内建电容值,IC还设计了寄存器控制位(LCAP[2:0]),功能同此代码选项相同。

5、 LCAP[2:0]

LCAP[2:0]是寄存器控制位,也是用来配置芯片内建的32.768kHz晶振匹配电容。位于内建电容选择寄存器(OSCLCAPS)的bit[2:0],复位初始值由代码选项OP_32KLCAP给出。只有代码选项OP_OSC选择了32.768kHz晶体振荡器,此控制位才有效。

寄存器控制位LCAP[2:0]和代码选项OP_32KLCAP的功能相同,都是配置内建匹配电容,但是它们的有效范围有一些区别:

(1) IC复位后,OP_32KLCAP有效,内建匹配电容受代码选项控制,此时LCAP[2:0]的初始值同OP_32KLCAP的值。

(2) 用户用程序修改LCAP[2:0]的值后,LCAP[2:0]生效,内建匹配电容受寄存器位控制。此时OP_32KLCAP无效,直到发生系统复位后才再次生效。

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

围观 9

新能源浪潮加速袭来。根据全国乘联会最新数据,今年5月新能源车国内零售渗透率达6.6%,较上年同期提升15个百分点。

随着电动汽车越来越普及,用户以及市场对电动汽车续航能力、充电速度以及安全要求也不断提升。作为电池“管家”,BMS(电池管理系统)在保障电动汽车安全运行和提升续航时间等方面发挥着关键作用。

优秀的BMS可以精准地监控电池状态,优化整包电池可用容量,提升电池续航时间和循环寿命,缓解用户的里程焦虑;同时,除了传统的三元锂电池,磷酸铁锂电池的流行也带来新的挑战,优秀的BMS可以对电压电流、温度等精准采集,尽早发现潜在的风险,确保动力电池的安全性,进而保障消费者的生命财产安全。

由于电芯性能天然存在差异,为了实现上述功能,优秀的BMS系统需要对电池所有电芯进行精准监控,而这需要强大的算力和复杂的算法支撑。如今,越来越多的BMS厂商开始采用芯驰科技E3430作为下一代BMS的主控芯片,来提高动力电池的续航能力和安全性。

今年4月12日,领先的车规芯片企业芯驰科技发布了高性能高可靠车规MCU E3控之芯。该系列产品可以为各类SoC和均衡算法的实施提供充沛的算力,支撑高端BMS、磷酸铁锂BMS等系统的不断优化和提升,可以让BMS产品整体性能得到质的飞跃。

E3共5个系列产品都已向客户开放样品和开发板申请。其中,E3430包含2对Cortex-R5F高性能实时内核CPU,功能安全等级达到ASIL D,很好地满足了高性能和高可靠的需求。

E3430

E3430最多可以提供三个主频达600MHz的ARM Cortex R5内核,功能安全等级达到ASIL D,温度等级达到AEC-Q100 Grade 1。

“芯驰高性能高可靠MCU
芯驰高性能高可靠MCU E3430产品框图

高性能多核CPU:

E3430具备两对双核锁步的ARM-Cortex R5 CPU Cluster,主频高达600MHz。其中CPU Cluster 1工作在Lock-Step模式,CPU Cluster 2可以由用户根据应用场景配置为Lock-Step模式或者Split模式。E3430最多可以提供3个独立运行的CPU并且都工作于600MHz的时钟频率,CPU算力高达3600DMIPS。

大容量片上存储:

3MB片上SRAM和384KB ECC SRAM,2对R5 CPU内核还分别配置了32KB I-Cache、32KB D-Cache,另有128KB的TCM存储器可以不经由总线以极低的延迟为CPU提供关键代码和数据,保障CPU性能的充分发挥。

丰富的外部存储扩展:

2个XSPI高速接口,用于支持包括Quad-SPI/Octal-SPI NOR FLASH、 HyperFLASH和HyperRAM,2个SEHC接口用于支持SD/SDIO和eMMC存储。

丰富的通信接口:

16个CAN-FD、 16个LIN、 2个支持TSN的千兆以太网和2个FlexRay,以及一个USB2.0接口。8个共支持32个SPI设备节点的SPI模块(使用模块片选信号)以及200个以上的可用I/O资源。这些丰富的外设资源有助于保障建立更多的管理和监控通道,应对不同电芯拓扑所带来的挑战。

模拟接口:

内置3个12-bit SARADC,4个Analog Comparator,支持单端和差分输入模式,共支持48路外部模拟信号接口。

采用BGA324封装,提供丰富I/O接口,每个数字I/O都具有GPIO功能且可以作为外部中断源输入。

功能安全等级支持ASIL D,采用双核锁步Cortex-R5,所有SRAM上都配置了错误检查和校正(ECC),在安全相关的外设上都配置了端到端(E2E)保护。

内置硬件信息安全模块,不仅支持经典公钥、哈希、对称加密和随机数生成算法,同时还支持国密商密SM2/3/4/9算法。

基于E3430的BMS推荐方案

为了方便用户能够更快地了解E3430产品的特性,芯驰提供了基于E3430的BMS推荐方案。

“E3430推荐方案"
E3430推荐方案

应用优势:

✓ 采用双核锁步CPU架构,具有多核、高主频的CPU设计;可以支撑当前及未来主流BMS对于算力和运算安全性的需求

✓ 集成丰富的通信及控制接口,丰富的I/O资源,不仅可以满足BMS应用需求,也支持对应用集成

✓ 可支持ASIL D级别功能安全系统设计,具有独立信息安全模块(HSM),支持国密商密相关算法

MCAL和SSDK软件包

在车规MCU领域,大部分用户都会采用AUTOSAR标准的软件包。芯驰针对E3430提供满足AUTOSAR标准的MCAL,实现微控制器、存储、通信和I/O等硬件的驱动程序,可以支持Vector、EB、普华、ETAS、东软睿驰、恒润(排名不分先后)等国内外主流AUTOSAR厂商的软件平台。为便于客户评估这些基本驱动模块,芯驰提供了AUTOSAR Demo程序,在设定的应用场景中展示这些基本模块的调用。

值得一提的是,为帮助客户顺利地运用E3430的各类安全机制,芯驰还提供基于AUTOSAR的功能安全软件库。用户可以参考功能安全手册,使用这些软件来完成最终的功能安全设计,实现各个功能模块的自检管理、故障应对、故障监控和事件记录。

此外,芯驰还为E3430 MCU开源提供基于FreeRTOS的SSDK软件包,主要包括操作系统、中间层和范例程序三个部分。

操作系统部分包含了FreeRTOS操作系统内核和适用于芯驰E3的BSP软件。BSP软件具体又囊括了CPU配置、系统模块配置、内外部存储驱动、各类外设和数模I/O驱动、外部器件驱动(以太网PHY、CAN收发器、LIN收发器、SBC等)和电源管理。

在中间层,芯驰提供了丰富的组件来满足不同客户的需求,如OTA服务、安全启动服务、信息安全服务、马达控制软件库、功能安全软件库、LWIP协议栈、Flash虚拟EEPROM等。

应用层软件部分,芯驰提供了丰富的范例程序,包括但不限于OTA升级、汽车以太网网关等。

在开发环境上,芯驰也已经可以支持IAR、Greenhills和GCC编译器,以及J-Link, LAUTERBACH等常用的调试器。

E3600/E3400/E3200系列产品

除了E3430,E3还有多款MCU产品推向市场,包括与E3430 Pin-to-Pin兼容的E3640(明星产品介绍 | E3640高性能多核MCU:面向域控制器解决方案,助力汽车电子电气架构升级),及采用LQFP176封装的E3210,包含1对400MHz Cortex-R5F CPU和1MB SRAM。

E3600/E3400/E3200系列产品均已向客户开放样品和开发板申请,预计在今年第三季度实现量产,有助于客户应对“缺芯”挑战。

芯驰E3600/E3400/E3200系列产品可以轻松地在同系列产品中实现升级迭代。E3全系列产品在系统架构上均采用ARM Cortex R5内核,且各类外设模块在硬件上相似、兼容,这也带来软件上的高兼容性。通过一套工具链和软件包,用户可以对不同型号产品进行编程开发。

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

围观 8

6月30日~7月1日在成都举办,该展会立足于电工仪器仪表行业发展战略和市场需求,着眼于新产品应用与技术,链接电工仪器仪表行业上下游。展会吸引了来自电力系统、计量监测机构、制造企业以及元器件等专业展商共同开展交流、讨论。

“沁恒微电子多款全栈MCU及接口芯片精彩亮相中国电工仪器仪表产业发展技术研讨会及展会"

沁恒微电子是一家通讯接口芯片和全栈MCU芯片公司,专注于连接技术和MCU内核研究,基于自研收发器PHY和处理器IP的全栈研发模式,取代传统的外购IP整合模式,提供以太网、蓝牙无线、USB和PCI类等接口芯片,及集成上述接口的连接型/互联型/无线型全栈MCU+单片机。

沁恒在电力行业智能化工业应用的长期实践中,积累了丰富的量产经验和成功案例,荣幸受邀参与了此次技术研讨会及展会。展会展示了在电力行业智能电网及电力仪表中广泛应用的产品:

1、通用增强型MCU CH32V203系列(高性能+低功耗)

• 青稞V4B,最高144MHz系统主频

• 20KB SRAM,64KB Flash

• 多种低功耗模式:睡眠、停止、待机

• 运行模式低至44.65uA/MHz

• 睡眠模式低至17.90uA/MHz

• 10通道12位ADC,10路触摸按键

• 4组定时器,2组运放比较器

• 1个USB2.0全速主机/设备接口

• 1个USB2.0全速设备接口,1个CAN

• 4个串口、2组SPI,2组I²C

封装:TSSOP20、QFN28、QFN48、LQFP32、LQFP48

2、高速互联型MCU CH32V307系列(USB2.0+以太网+8串口+内置PHY)

• 青稞V4F,144MHz主频

• 支持硬件浮点运算(FPU)

• 64KB SRAM,256KB Flash

• USB2.0高速主机/设备接口

(480Mbps 内置PHY)

• USB2.0全速OTG接口,2个CAN

• 千兆以太网控制器(内置10M PHY)

• 8路串口:3个USART和5个UART

• SDIO、FSMC、DVP数字图像接口

• 2组IIC、3组SPI、2组IIS

• 12位ADC,16路触摸按键,2组12位DAC

• 10组定时器、4组运放比较器

封装:TSSOP20、LQFP64、QFN68、LQFP128

3、低功耗蓝牙MCU CH32V208系列(BLE+USB+以太网+CAN+4串口)

• 青稞V4C,最高144MHz系统主频

• 64KB SRAM,128KB Flash

• 低功耗蓝牙BLE 5.3

• 10M以太网控制器(MAC+PHY)

• USB2.0全速主机/设备

• USB2.0全速设备接口,1个CAN

• 4个USART、2组I²C、2组SPI

• 2组运放比较器

• 16通道12位ADC转换,16路触摸按键

• 5组定时器

封装:LQFP64M、QFN68、QFN48、QFN28

4、蓝牙串口透传芯片 CH914x系列(实现蓝牙和串口数据之间的透明传输)

• 支持广播模式、主机模式和从机模式

• 支持串口AT配置和蓝牙传输配置

• 提供电脑端蓝牙虚拟串口驱动

• 兼容已有串口软件和工具,无需二次开发

• 支持 Windows/Linux/Android/iOS等系统蓝牙主机连接

• 提供通用GPIO和同步GPIO功能,支持蓝牙控制

• 传输距离100米

5、工业级USB2.0高速HUB芯片 CH334(4端口高性能MTT高速USB2.0 )

• 4口USB集线器,提供4个USB2.0下行端口,向下兼容USB1.1 协议规范

• 支持高性能的MTT模式,为每个端口提供独立TT实现满带宽并发传输,总带宽是STT的4倍

• 自研的专用USB PHY,低功耗技术,相比第一代HUB 芯片降低约20%

• 6KV增强ESD性能,Class 3A

• 支持工业级工作温度范围,-40℃~85℃

6、USB转串口芯片 CH34x系列(USB高速/全速转串口系列芯片,实现USB转1/2/4/8路串口)

• 支持高波特率与硬件流控

• 支持串口I/O独立供电,实现5V/3.3V/2.5V/I.8V 等串口通讯

• 支持多种驱动类型,可使用厂商VCP 串口驱动或CDC/HID类驱动

• 内部高度集成,内置时钟/USB终端电阻/上电复位,外围精简

• 支持USB/BLE 转虚拟串口,实现BLE/串口/USB 三向透传

• 支持免外围电路的串口一键下载功能

更多产品如下

全栈MCU+

“沁恒微电子多款全栈MCU及接口芯片精彩亮相中国电工仪器仪表产业发展技术研讨会及展会"

“沁恒微电子多款全栈MCU及接口芯片精彩亮相中国电工仪器仪表产业发展技术研讨会及展会"

接口转换专家

“沁恒微电子多款全栈MCU及接口芯片精彩亮相中国电工仪器仪表产业发展技术研讨会及展会"

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

围观 7

介 绍

栈是MCU内部一块RAM区域,用于存放某些特别的数据,它按照后进先出(LIFO/FILO)的原则,主要是为了程序中函数和中断服务时保护现场、恢复现场。现在MCU的RAM空间越来越大,许多工程师都不用去关注栈的划分,但是如果遇到了大项目,就需要关注堆栈大小设置是否合理,如果有问题就很有可能导致Fault。

近期有工程师使用e2 studio调试瑞萨MCU时,需要查看栈的使用情况,通过软件找了一圈没有发现,感觉是没提供这个功能。其实e2 studio是有的,下面介绍stack栈的调试窗调出。

主要内容:

首先需要调出栈的观察窗口,通过菜单中的窗口>显示视图>其他,会调出显示视图窗口,选择Stack Analysis后会添加stack观察标签页。

“图1
图1 stack栈调出菜单及调出窗体

添加后的stack标签页提示缺少SNI文件及设置无法打开,如下图2所示。这是因为stack需要SNI文件,而之前工程是不需要的所以没有输出,需要设置输出stack文件,并且重新编译整个工程,编译整个工程按钮如图2中红框所示。

“图2
图2 stack添加到标签页后提示

打开stack输出文件选项,选择菜单中的项目>C/C++ Project Settings,如下图3所示,即调出工程设置菜单。

“图3
图3 工程设置选项

在C/C++构建>设置>Linker>Miscellaneous中,如下图4所示,选择启用Outputs a stack use information file这个选项,这样重新编译整个工程就可以使用了。

“图4
图4 stack设置选项

编译后的显示界面如下图5所示,需要注意的是编译要选择构建HardwareDebug即整个工程,不然不会生成SNI文件。

“图5
图5 stack标签页正常显示内容

结 论

通过上面的设置实现了e2 studio stack analysis的使用。

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

围观 6

兆易创新与Ashling联合宣布,兆易创新GD32V系列RISC-V内核通用MCU已与Ashling旗下的RiscFree™工具链全面适配,包含集成开发环境(IDE)和软件开发支持。

“Ashling为兆易创新GD32

GD32V是GD32 MCU家族于业界率先推出的基于RISC-V内核的通用产品系列,以均衡的处理性能、低功耗和丰富外设资源为RISC-V技术进入市场主流应用提供了高性价比的创新之选。GD32V系列产品全面适用于工业控制、电机驱动、电源管理、消费类和手持设备、POS、车载GPS、LED显示屏等多种应用场景。

兆易创新产品市场总监金光一表示:“RISC-V市场需求在持续增长。我们很高兴联合业界领先的RISC-V工具链供应商Ashling,为屡获殊荣的GD32V系列RISC-V内核通用MCU提供高效开发支持。Ashling RiscFree™将有力补充GD32 MCU生态系统,使我们不断扩大的客户群受益。”

Ashling RiscFree™集成开发环境(IDE)包含编译器和调试器,为兆易创新GD32V系列MCU提供软件开发和调试支持。

自推出以来,Ashling RiscFree™工具链一直在嵌入式工具市场上稳步建立市场份额,在RISC-V市场上尤为突出,以易用性、广泛的功能、插件架构和即将推出的实时追踪功能,成为32位和64位RISC内核处理器进行软件开发的优选。

Ashling首席执行官Hugh O'Keeffe表示:“很高兴为兆易创新GD32V系列RISC-V内核通用MCU提供支持,我们的RiscFree™ IDE现已成为兆易创新MCU开发和调试生态系统的一员。相信RiscFree™将为兆易创新的用户群带来卓越的开发体验,并有助于加快基于GD32V系列MCU解决方案的部署。”

Ashling RiscFree™工具链对GD32V系列MCU提供以下支持:

▶ 工程和编译管理器,支持Make和CMake

▶ 源代码创建及分析

▶ RiscFree™ IDE完全集成了GCC工具链,支持newlib运行时库

▶ 运行时源码调试

▶ 外设和CSR寄存器支持调试寄存器视图

▶ RTOS调试器支持FreeRTOS任务和队列视图

▶ 自定义指令支持,包括RISC-V扩展指令集

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

围观 11

在C语言编程过程中,由于计算需要,会使用各种各样的变量,用于给需要访问的地址取个名称,方便编程中使用,代码维护者也容易理解。

这里先给大家分享一个案例,让大家意识到变量赋初始值的重要性。

某用户在基于瑞萨的MCU:RA6T2做开发时,发现一个问题,MCU发出的CAN数据帧总是莫名其妙的出错,比如应用中明明只使用了CAN的扩展帧,但是使用捕捉工具总是能捕捉到远程帧,出现远程帧的情况毫无规律可言,有时添加一个定时器中断,该现象就不会出现了,有时修改了代码里某处跟CAN没有任何关系的代码,该问题又会出现,过了两周时间调试无果。在介入Debug时发现,他使用的是CAN扩展帧,扩展帧使用29位ID标识符,而且对ID区数据定义了一个如下结构体:

“在MCU编程中局部变量赋初始值的重要性"

他在需要发送CAN帧时,申请一个如上结构体的临时变量can_id,在把can_id.id赋值后,再把该变量的地址传递给CAN的发送函数,在发送函数里使用如下语句把id的数据写入CAN的发送消息缓冲寄存器:

“在MCU编程中局部变量赋初始值的重要性"

如下图,其中第30位的0表示数据帧,并不是远程帧,31位的1表示扩展帧。

“在MCU编程中局部变量赋初始值的重要性"

用户是把can_id的所有数据赋值给了CFDTMID0寄存器,假如can_id.dummy中第二个位是1,会有什么后果呢?CFDTMID0.TMRTR=1,即CAN会发送远程帧。

用户又问:我没有给dummy赋值啊,为什么dummy的第二个位会变成1呢?这就是问题所在了,就是因为他没有给can_id.dummy赋值,所以can_id.dummy有可能为任意的值。下面详细分析一下,为什么这个局部变量的值会随意变化。

大家知道,变量根据存储类型和用途,一般可以分成:全局变量和局部变量。全局变量,就是指分配了固定地址的变量,全局变量可以在整个代码范围内使用。我们在申请全局变量时,有时对它赋一个初始值,也时也不会赋初始值,在代码上可能看不出有什么区别,但是编译器在编译程序时,是区别对待他们的。对于有初始化的变量,编译器还需要在Code Flash里(代码存储区)分配一段空间,把变量的初始值全部存储在该区域里,并且在MCU的启动代码里插入一段程序,把这些Code Flash区的初始值拷贝到变量对应的RAM地址中。假如上面的can_id是全局变量,并且申明变量的同时并按下图赋初始值:

“在MCU编程中局部变量赋初始值的重要性"

这时can_id.dummy=0,如果代码中用户没有再赋值,它的值也不会变化,这样就不会发生用户的那个远程帧的问题了。对于没有赋初始值的全局变量,编译器只是分配RAM的地址,并不会修改RAM地址里的数据,那么这个变量的值就会依赖于MCU启动时RAM里的值了。为了避免未赋值的全局变量出现上述的问题,我们一般会在MCU启动代码里插入未赋初始值全局变量的清零操作,相当于做了一个未赋初始值的全局变量的初始化赋值操作。

像上面的案例,can_id申请的是局部变量,这又是什么情况呢?

因为MCU的RAM资源有限,为了最大限度的利用RAM,MCU会提前分配一块RAM区域,叫堆栈区,这块区域大家共用,对于只需要在某个函数内使用的变量,引入了局部变量概念。在开始执行该函数时,才从堆栈里分配地址给局部变量使用,函数执行结束后,该变量占用的RAM区域被堆栈回收,当下次再调用该函数,再重新分配RAM。因此对于局部变量,每次申请到的地址是不同的,该地址很可能是其它函数使用过并改写数据了的,因此每次函数调用时can_id.dummy的数据是不确定的。因为堆栈区里的数据是被反复利用的,即使MCU的初始化代码对堆栈区域做清零处理,也是没有意义的。

由此看来,局部变量在申请的时候赋一个初始值,是非常有必要的。虽然有时候赋初始值没有用,但是出现问题时常常是致命的,而且也是非常难以定位的,你可能觉得我的代码里后面肯定会赋值的,但是后面维护该项目的其他工程师并不一定意识到这一点。像类似上面的案例,我在其他用户当中也是经常见到的。因此软件工程师在编程的时候,一定要养成局部变量赋初始值的习惯。

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

围观 11

引言与说明

现有的制冷技术可以分为两大类,第一类是较为传统的压缩气体制冷技术,主要特征为使用易压缩气体作为热介质,利用气体变化实现热量转移,常见的工作气体有氨气、二氧化碳、氟利昂等,这些气体泄露后会造成大气环境污染。第二类则为近些年来新兴的清洁制冷技术,常见的有半导体制冷技术和磁制冷技术,半导体制冷又称为温差电制冷,是一种发展较为成熟的新型制冷方式。

现有的国产新冠疫苗,保存温度大都在2-8℃之间,其他常见疫苗也保存在这个温度区间,例如,狂犬病疫苗、百白破疫苗、甲肝疫苗、脊髓灰质炎糖丸、麻疹疫苗等。

本课题设计了一款用于保存疫苗的半导体制冷设备,硬件系统包括主控电路、制冷电路、开关检测电路、显示电路、照明电路等模块;软件系统包括主程序、DS18B20传感器驱动函数、LCD屏幕驱动函数、开关检测函数、PID算法函数,制冷片控制函数等部分。

“图
图 制冷系统结构图

主控芯片

“基于复旦微MCU的半导体制冷器方案"

处理器内核:ARM Cortex-M0架构,支持MPU,支持用户/特权模式,64MHz主频,SWD接口,24bit Systick定时器。

低功耗平台:典型运行功耗130uA/MHz@48MHz,Sleep模式3.3uA typ,DeepSleep模式,RTC走时+全部RAM保持+CPU内核保持,1.5uA typ。

大容量储存器:256KB Flash空间,32 KB RAM,100000次Flash寿命,自带用户代码保护功能。

丰富的模拟外设:高可靠、可配置BOR电路,超低功耗PDR电路可编程电源监测模块,3个低功耗模拟比较器,12bit 2Msps SAR-ADC,12bit 1Msps DAC,内置基准电压产生电路,高精度温度传感器(±2℃)。

通用通信接口:5个UART接口,3个LPUART接口,1个7816智能卡接口,3个主从模式SPI,1个主从模式I2C,1个CAN2.0B接口,7通道外设DMA,可编程CRC校验模块。

定时器资源:一个16bit高级定时器,最高PWM分辨率120MHz,3个16bit通用定时器,1个32bit基本定时器,1个16bit基本定时器,1个24bit Systick,1个32bit低功耗定时器,1个16bit低功耗定时器,2个看门狗定时器,一个低功耗实时时钟日历(RTCC)。

LCD资源:芯片内部集成LCD接口,最大支持4COM×44SEG/ 6COM×42SEG/ 8COM×40SEG三种显示方案,支持休眠显示。

传感器工作介绍

本设计使用DS18B20温度传感器。该传感器由DALLAS公司生产,工作电压为3.3~5.5V,温度测量范围为-55℃~125℃,温度测量精度为1℃,分辨率有多种选择,分别对应多种采样时间,如下表所示。

“基于复旦微MCU的半导体制冷器方案"

根据传感器芯片手册编写驱动代码,分别有:复位函数、写入函数、读取函数;各函数结构如下:

复位指令:480-960us拉低+15-60us拉高+回传60-240us低电平

读取指令:1us拉低+15us后读取

写入指令:1us拉低+15-60us中读取

“图
图 DS18B20复位时序

“图
图 DS18B20读取时序

根据时序图的要求,我们采用延迟函数实现电平的延迟,采用GPIO设置函数实现电平的设定。在完成基础函数的搭建后,根据DS18B20传感器的工作要求,即可实现温度数据的获取。

人机交互界面介绍

根据FM33LG048芯片内置的LCD显示接口,本设计采用四端口模式来实现人机交互,通过连接4个控制端口(设计采用PA0-PA3),25个数据端口,将温度数据发送到显示屏上,实现数据的可视化。

温度控制介绍

本设计采用位置型PID算法调节温度,共有三个环节分别为:比例控制环节、积分控制环节、微分控制环节。

比例控制(P,proportion):能够成比例控制偏差信号。当出现偏差信号时,偏差信号和比例增益一起产生作用,因而可以提高系统的反应速度。的大小会直接影响系统稳定性,当参数过大时,系统反应速度会明显提高,但是超调量会增加,很容易产生振荡。当参数过小时,系统反应速度慢且调节效果差,造成大量资源浪费。因而,单纯的比例控制并不能获得稳定的效果,需要加入积分微分环节。

积分控制(I,integral):能够减小系统的稳态误差和静态误差。当出现偏差信号时,积分环节始终会发生作用。参数决定了积分作用的强弱,的大小和积分作用呈反比关系。在积分时间充足的条件下,积分控制可以完全消除静态误差。但是积分控制和比例控制一样,作用太强也会产生超调震荡。

微分控制(D,differential):能够减小系统的动态误差。当出现偏差信号时,微分环节能够给出修正信号,避免偏差信号快速变大带来的调节失效。参数决定了微分修正的大小,当过大时,系统误差变化赶不上修正变化,会产生震荡现象。当输入没有变化时,微分控制不起作用,因此需要和比例控制、积分控制一起使用。

PID控制器具有三者的优点,比例控制器可以提高反应速度,积分控制器消除静态误差、微分控制器预判系统误差发展趋势,选择合适的、、可以实现快速调节输出量。

“图
图 温度输出函数流程图

创新点

1、采用国产单片机芯片FM33LG048完成了半导体制冷系统设计,并制作实物设备完成性能检测实验。

2、开发基于FM33LG048单片机的DS18B20传感器驱动代码。

3、提出不同的使用场景下的制冷方案,从而为不同需求的用户提供个性化方案。

“图
图 系统制冷测试状态(红色LED为继电器吸合指示灯)

“图
图 LCD全显示状态图

“图
图 主程序流程图

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

围观 7

页面

订阅 RSS - MCU