STM8

今天和大家分享一下CAN滤波器相关的内容,滤波器主要用来设置CAN的接收ID,当CAN总线上所挂接的节点较多,数据量较大的话,对单节点的接收判断可能造成较大的压力、占用较多的资源。为了解决这个问题,可以通过设置滤波器实现只接收特定ID。ST系列单片机的滤波器设置非常绕,很容易把自己绕晕了,下面以STM8为例和大家分享一下。

注意,此文需要看多遍。

前言

在CAN协议里,报文的标识符不代表节点的地址,而是跟报文的内容相关的。因此,发送者以广播的形式把报文发送给所有的接收者。节点在接收报文时,根据标识符的值决定软件是否需要该报文;如果需要,就拷贝到RAM里;如果不需要,报文就被丢弃且无需软件的干预。为满足这一需求,beCAN为应用程序提供了个可配置的、位宽可变的6个(0-5)过滤器组,用于只接收那些软件需要的报文。硬件过滤的做法节省了CPU开销,否则就必须由软件进行过滤,从而占用一定的CPU资源。

滤波器设置

滤波器设置包括下面几个寄存器:CAN滤波模式寄存器1 (CAN_FMR1)和CAN滤波模式寄存器2(CAN_FMR2)、CAN滤波配置寄存器1 (CAN_FCR1)、CAN滤波配置寄存器2 (CAN_FCR2)和CAN滤波配置寄存器3 (CAN_FCR3),CAN滤波组i寄存器x (CAN_FiRx) (i = 0 .. 5, x = 1 .. 8)。

滤波模式寄存器用于设置滤波器为标识符列表模式和掩码模式,滤波配置寄存器用于开启或关闭滤波器和滤波器的宽度设置,滤波组用于具体滤波设置。

6个可配置的位宽可变的过滤器组,通过FSCx0(x=1..6)和FSCx1(x=1..6)设置滤波宽度,

“STM8单片机CAN滤波器的设置"

就32位滤波器设置进行解读,CAN报文分为标准帧和扩展帧,标准帧ID11位,扩展帧29位,ID与滤波配置映射关系如上表所示,如滤波模式设置可知可以分为两个ID或者一个ID+Mask。当需要过滤某一段ID时,使用ID+Mask模式,当过滤具体ID时直接使用ID模式即可。

如果我的扩展id是0x12345678 ;想只接收0x12xxxxxx的标识符号,该如何设置滤波器?

此处采用32位滤波器0进行滤波配置,因此FSC00 = 1;FSC01 = 1;FMH0 = 0;FML0 = 0;
扩展id为0x12345678 (0001,0010,0011,0100,0101,0110,0111,1000)

将扩展帧ID填入CAN帧ID格式中

“STM8单片机CAN滤波器的设置"

RTR位我们设置为0表示数据帧,IDE位设置为1表示扩展ID,因为我们的ID是29位的,所以RTR = 0;IDE = 1;

在滤波器中填充如下:

“STM8单片机CAN滤波器的设置"

如果要关心到具体的某一个比特位置;如果要过滤让它只接收0x12xxxxxx的表示符号;

这时候要根据它实际在identify中的位置去修改idmask ; 前八个比特,对应的就是黄色和绿色的部分,所以其他的颜色,可以都填0表示不需要关心,则这里填入:1 1 1 1 ,1 x x x,我们这里填0xF8 ;

CAN_F0R1 = 0x91; CAN_F0R2 = 0x00; CAN_F0R3 = 0x00; CAN_F0R4 = 0x00;
CAN_F0R5 = 0x91; CAN_F0R6 = 0x00; CAN_F0R7 = 0x00; CAN_F0R8 = 0x00;

同理,对于下面的配置是只接收标准id= 0x321(0011,0010,0001)的ID(也是32位过滤器),因为也是数据帧,所以RTR = 0,标准的id,所以IDE = 0 ;所以填入到:

“STM8单片机CAN滤波器的设置"
CAN_F0R1 = 0x64; CAN_F0R2 = 0x20; CAN_F0R3 = 0x00; CAN_F0R4 = 0x00;
CAN_F0R5 = 0xFF; CAN_F0R6 = 0xE0; CAN_F0R7 = 0x00; CAN_F0R8 = 0x00;

设置过滤器0只接收ID为0x1828A0EF和0x1828A0EE的数据帧。(工作在标识符列表模式)

首先我们把这两个ID写成二进制:

0x1828A0EF:0001 1000 0010 1000 1010 0000 1110 1111
0x1828A0EE:0001 1000 0010 1000 1010 0000 1110 1110

然后我们将0x1828A0EF二进制的格数据组成如上图mapping所示的格式

Can_fxr1:1100 0001 0xc1
Can _fxr2:0100 1001 0x49 //这里有个RTR位我们设置为0表示数据帧,IDE位设置为1表示扩展ID,
Can _fxr3:0100 0001 0x41
Can _fxr4:1101 1110 0xDE

这时我们工作在标识符列表模式,identifier/Mask的寄存器相当于identifier使用。

再将0x1828A0EE二进制的格数据组成如上图mapping所示的格式

Can _fxr5:1100 0001 0xc1
Can _fxr6:0100 1001 0x49 //这里有个RTR位我们设置为零表示数据帧,IDE设置为1表示扩展ID
Can _fxr7:0100 0001 0x41
Can _fxr8:1101 1100 0xDC

“STM8单片机CAN滤波器的设置"

16位配置模式也经常使用,如CAN网络管理中往往涉及到网络管理ID-0x4xx,因此需要利用ID和Mask模式,其余的采用ID模式,可以建立滤波器设置寄存器数组。

0x400网段,0x330,0x320
0x400: 展开 0000 0100 0000 0000,采用标准帧数据帧格式
0x330: 展开 0000 0011 0011 0000
0x320: 展开 0000 0011 0010 0000
CAN_F0R1: 100 0000 0  0x80
CAN_F0R2: 000 00 000  0x00
CAN_F0R3: 111 0000 0  0xE0
CAN_F0R4: 00000000   0x00
CAN_F0R5: 011 0011 0  0x66
CAN_F0R6: 00000000    0x00
CAN_F0R7: 011 0010 0   0x64
CAN_F0R8: 00000000    0x00
FSC00 = 0; FSC01 = 1; FMH0 = 1; FML0 = 0; FACT0 = 1;

“STM8单片机CAN滤波器的设置"

“STM8单片机CAN滤波器的设置"

在以往的项目中用过多个品牌的单片机,包括国产的,一直感觉ST的滤波器设置比较麻烦,每次用到的时候都要花较长时间去回忆。

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

围观 80

为帮助开发者轻松快捷地找到适合项目的微控制器,意法半导体在主要应用商店和公司官网st.com发布了先进的手机应用。

“意法半导体新STM8和STM32手机应用软件优化微控制器选型"

STM8 Finder 和 STM32 Finder替代以前的ST MCU Finder手机应用,利用最新的应用软件设计技术,为用户提供稳健和便利的使用体验。新功能包括强大的搜索筛选器,让用户更细致地描述所需的外围设备。自适应图形界面能够根据智能手机或平板电脑的触屏以及屏幕方向自动优化显示效果,内容缓存支持离线搜索。此外,新的增量数据库管理功能在数据更新时可大限度地减少数据使用量和等待时间。

这两款应用软件可以查看STM8 8位微控制器、STM32 32位Arm®Cortex®-M微控制器和STM32MP15 Cortex-A7微处理器全系产品以及评估板、Discovery探索套件和Nucleo开发板。在找到所需产品后,用户可以搜索相关的辅助资料,例如,文档、项目文件和软件。

这两款软件还方便用户购买芯片和开发板,参加Facebook™、Twitter™等社交平台上的开发社区,以及STM32 YouTube™频道和ST Community。

STM8 Finder和STM32 Finder在苹果和谷歌应用商店以及st.com免费下载。

STM32和STM8是STMicroelectronics International NV(意法半导体国际有限公司)或其关联公司在欧盟和/或其他地方的注册和/或未注册商标。特别是,STM32在美国专利商标局注册。

关于意法半导体

意法半导体拥有46,000名半导体技术的创造者和创新者,掌握半导体供应链和先进的制造设备。作为一家独立的半导体设备制造商,意法半导体与十万余客户、数千名合作伙伴一起研发产品和解决方案,共同构建生态系统,帮助他们更好地应对各种挑战和新机遇,满足世界对可持续发展的更高需求。意法半导体的技术让人们的出行更智能,电力和能源管理更高效,物联网和5G技术应用更广泛。详情请浏览意法半导体公司网站:www.st.com

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

围观 38

意法半导体发布了三款功能安全软件包,简化基于STM32和STM8微控制器和微处理器的安全至关重要的工业、医疗、消费和汽车产品的开发。

这些软件包可免费下载使用,其中包含满足适用的IEC和ISO规范所需的资源。意法半导体拥有1000多款STM32微控制器,以及包括STM8AF汽车级认证产品在内的STM8系列微控制器,为开发者提供广泛的产品选型和亲民的价格,而价格昂贵的专用安全MCU通常是无法做到这两点的。

工业用功能安全软件包X-CUBE-STL通过了TÜV Rheinland认证测试机构的IEC 61508 SC3认证,与安全手册的使用条件配合使用,可以在STM32上实现安全完整性等级SIL-2或SIL-3的安全功能。

X-CUBE-STL现已上线,支持大多数STM32产品,按照计划,2020年第四季度将发布支持STM32L5、双核STM32H7和STM32MP1的软件包。

面向安全至关重要的家用电器,X-CUBE-CLASSB通过了Underwriters Laboratories(UL)的IEC 60335-1和60730-1的功能安全认证,适用于STM32F0、G0、F1、F3、G4、F2、F4、F7、H7、L0、L1、L4和WB系列STM32微控制器。

STM8-SafeCLASSB软件包让设备开发人员能够利用STM8产品的高能效、低成本和低功耗优势。

X-CUBE-STLX-CUBE-CLASSBSTM8-SafeCLASSB包含与应用无关的针对CPU内核和内存组件的自检库,以及必要的安全文档。

STM8A-SafeASIL软件包提供最高ASIL B级汽车功能安全应用开发所需的文档,适用于符合ISO26262的软件开发流程,可帮助用户实现STM8AF安全手册要求的软件自检库。

所有嵌入式开发人员都能利用这些软件包来克服工程难题,加快项目研发周期,最大程度地降低认证成本。

ST 授权合作伙伴的服务支持覆盖产品开发生命周期的各个阶段,包括安全要求制订;安全诊断、测试和验证;以及产品认证。这些授权合作伙伴包括Embedded Office、Microsoft、 Arm®、SEGGER和Wittenstein,每家授权公司都提供支持STM32微控制器和微处理器的安全RTOS操作系统。此外,IAR Systems和Arm还提供取得功能安全认证的STM8和STM32编译器。

Embedded Office、Hitex、innotec、MESCO和NewTec提供软件、设计和工程服务、参考平台和培训设施,以支持客户项目开发。

新功能安全软件包现已上线,用户可免费下载使用。X-CUBE-STLSTM8A-SafeASIL下载需要签订保密协议(NDA)。详情联系意法半导体当地销售办事处。

详情访问 https://www.st.com/functionalsafety

关于意法半导体

意法半导体(STMicroelectronics; ST)是全球领先的半导体公司,提供与日常生活息息相关的智能的、高能效的产品及解决方案。意法半导体的产品无处不在,致力于与客户共同努力实现智能驾驶、智能工厂、智慧城市和智能家居,以及下一代移动和物联网产品。享受科技、享受生活,意法半导体主张科技引领智能生活(life.augmented)的理念。意法半导体2019年净收入95.6亿美元,在全球拥有10万余客户。详情请浏览意法半导体公司网站:www.st.com

围观 15

1. 综诉

也许单片机在你看来是一件不太容易的事,但据我所知,单片机,无非就是控制它的GPIO口,所以可以看出,学会如何操作控制GPIO口对使用单片机来说是很重要的一件事。

在装载STM8的单片机中,I/O共有12种工作模式。实际上这里的概念也是和STM32等其他单片机,理解了这12种状态,也就基本上理解了大部分I/O口。

2. STM8S103的GPIO介绍

GPIO(英文:General-purpose input/output),通用型之输入输出的简称,其引角可以供使用者由程控自由使用,PIN脚依现实参考量可作为通用输入(GPI)或者输出(GPO)或通用输入输出(GPIO)。

打开官方IAR例程中的库文件stm8s_gpio.h文件中可以找到,STM8全部的I\O模式

typedef enum
{
  GPIO_MODE_IN_FL_NO_IT      = (uint8_t)0x00,  /*!< Input floating, no external interrupt */
  GPIO_MODE_IN_PU_NO_IT      = (uint8_t)0x40,  /*!< Input pull-up, no external interrupt */
  GPIO_MODE_IN_FL_IT         = (uint8_t)0x20,  /*!< Input floating, external interrupt */
  GPIO_MODE_IN_PU_IT         = (uint8_t)0x60,  /*!< Input pull-up, external interrupt */
  GPIO_MODE_OUT_OD_LOW_FAST  = (uint8_t)0xA0,  /*!< Output open-drain, low level, 10MHz */
  GPIO_MODE_OUT_PP_LOW_FAST  = (uint8_t)0xE0,  /*!< Output push-pull, low level, 10MHz */
  GPIO_MODE_OUT_OD_LOW_SLOW  = (uint8_t)0x80,  /*!< Output open-drain, low level, 2MHz */
  GPIO_MODE_OUT_PP_LOW_SLOW  = (uint8_t)0xC0,  /*!< Output push-pull, low level, 2MHz */
  GPIO_MODE_OUT_OD_HIZ_FAST  = (uint8_t)0xB0,  /*!< Output open-drain, high-impedance level,10MHz */
  GPIO_MODE_OUT_PP_HIGH_FAST = (uint8_t)0xF0,  /*!< Output push-pull, high level, 10MHz */
  GPIO_MODE_OUT_OD_HIZ_SLOW  = (uint8_t)0x90,  /*!< Output open-drain, high-impedance level, 2MHz */
  GPIO_MODE_OUT_PP_HIGH_SLOW = (uint8_t)0xD0   /*!< Output push-pull, high level, 2MHz */
}GPIO_Mode_TypeDef;

在芯片资料中我们可以看到,I/O口的基本结构如下:


由于我们使用库函数开发,因此本文就不再解释具体的寄存器操作了,如想了解请察看STM8芯片的手册。

3. 模式介绍

3.1 浮空输入(Input Floating)

浮空输入在 I\O 模式中带有 IN_FL 字眼,如:GPIO_MODE_IN_FL_NO_IT 、GPIO_MODE_IN_FL_IT。

浮空输入也叫悬浮输入,一般把浮空输入和上拉输入做类比学习。浮空输入的电平不确定的,即使外部的一个很小的输入信号都会使其发生改变。如果引脚设置为悬空的情况下,读取该端口的电平是不确定的。

3.2 上拉输入(Input pull-up)

上拉输入在 I\O 模式中带有 IN_PU 字眼,如:GPIO_MODE_IN_PU_NO_IT 、GPIO_MODE_IN_PU_IT。

上拉输入的时候,引脚内部有一个上拉电阻通过开关连接到电源VDD, 当引脚没有和外部电路连接时,设置上拉输入方式的I/O引脚电平是确定的高电平。

3.3 开漏输出(Output open-drain)

开漏输入在 I\O 模式中带有 OUT_OD 字眼,如:GPIO_MODE_OUT_OD_LOW_FAST 、GPIO_MODE_OUT_OD_LOW_SLOW 、 GPIO_MODE_OUT_OD_HIZ_FAST 、 GPIO_MODE_OUT_OD_HIZ_SLOW。        

开漏输出就是不输出电压,低电平时接地,高电平时不接地。如果外接上拉电阻,则在输出高电平时电压会拉到上拉电阻的电源电压。这种方式适合在连接的外设电压比单片机电压低的时候。输出端出跟集电极开路十分相似,工作原理也是一样的。不同的是,开漏输出使用的场效应管,使用时要加上拉电阻。

3.4 推挽输出(Output push-pull)

推挽输入在 I\O 模式中带有 Output push-pull 字眼,如:GPIO_MODE_OUT_PP_LOW_FAST 、 GPIO_MODE_OUT_PP_LOW_SLOW 、 GPIO_MODE_OUT_PP_HIGH_FAST 、GPIO_MODE_OUT_PP_HIGH_SLOW。

推挽输出可以输出高,低电平,连接数字器件; 推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源低定。

3.5 中断和输出速度

中断在 I\O 模式中带有 IT 字眼。中断只存在 I\O 输入中,因为在输出中设置中断也没有任何意义。中断的意思就是中止当前的工作,然后去执行另外的任务,执行完之后再回来执行原来的任务。

输出速度也只存在 I\O 输出中,可以调整 I\O 的输出速度来将它们进行等级划分,如:low level,10MHz、low level,2MHz、high-impedance level,10MHz、high level,10MHz、high-impedance level, 2MHz、high level, 2MHz。

3.6 初始电平

我们初始化GPIO时候,会有一个初始电平的操作,例如GPIO_MODE_OUT_OD_LOW_FAST,GPIO_MODE_OUT_OD_HIZ_FAST,GPIO_MODE_OUT_PP_HIGH_FAST中,含有LOW、HIZ、HIGH,分别为低电平、高阻抗电平、高电平三种状态。

4. 例程

4.1 编译环境:

我的编译环境是IAR,这款软件是现在STM8的主流平台,比较推荐。不过我打算等到STCubeMX更新出比较方便的版本后再去使用Keil5,因为我在用STM32的时候就是利用Keil5,的确很方便,你们也可以学着用一下。

4.2 主芯片:

我的主芯片是STM8S系列中的103,其中STM8S的003、005、和103、105,配置一样(外设和CPU频率,FLASH),在代码相同的情况下均可进行烧写。

4.3 代码

先在头文件里定义相对应的LED引角参数。

/* Define --------------------------------------------------------------------*/
/*LED*/ 
#define Led_Opt_Pin GPIO_PIN_5
#define Led_Opt_GPIO_Port GPIOB

在主函数调用MX_GPIO_Init()函数初始 I\O 的引角,再调用GPIO_TogglePin()函数对 I\O 进行一个翻转,直接将一个LED灯进行翻转的话则可以看到明显的变化。

/*******************************************************************************
* Function Name  : MX_GPIO_Init
* Description    : GPIO_Init
* Input          : None
* Output         : None
* Return         : None
********************************************************************************/
void MX_GPIO_Init(void)
{
  //LED                                    模式为推挽高速输出
  GPIO_Init(Led_Opt_GPIO_Port,Led_Opt_Pin, GPIO_MODE_OUT_PP_HIGH_FAST);
  
}


/*******************************************************************************
* Function Name  : GPIO_TogglePin
* Description    : None
* Input          : None
* Output         : None
* Return         : None
********************************************************************************/
void GPIO_TogglePin(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin)
{
  
  GPIOx->ODR ^= GPIO_Pin;
  
}

LED灭

LED亮

5. 结尾

对STM8的GPIO的说明和引用到这里结束,感谢各位看官的点击。

如果觉得有所收获请点下推荐,若认为该博客中存在错误的说明或者对博客中某方面有疑问请留言。

作 者:浩宇99
出 处:
https://www.cnblogs.com/zhenghaoyu/p/10676192.html
版权声明:本文原创发表于 博客园,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。

围观 728

意法半导体ST-MC-SUITE可轻松获取STM32和STM8微控制器电机控制应用开发全部资源的入口。该工具允许用户收集教程和文档,存储项目设置(硬件和软件),获取软件解决方案下载链接,包括最新的X-CUBE-MCSDK软件包,以及在线购买评估硬件。

软件直观功能包括可选择的通用搜索工具或根据项目描述过滤相关内容的自适应前端。文档和视频可以预览并保存在个性化包中,用户还可以下载zip压缩文件格式的资料。

在开始创建项目前,用户还可以设置项目,选择和保存项目内容,包括适当的软件和各种适用的评估板(控制板和电源板)、电机控制套件和可在线购买的逆变器。支持文档可以直接下载或添加到个性化信息包。用户可以保存多个项目设置,对比不同的解决方案,为每个项目找到最好的方法,或者同时管理多个项目。

X-CUBE-MCSDK电机控制软件开发套件包含固件库和STM32 Motor Control Workbench图形配置器。最新版本5.3版新增了对STM32G0 系列微控制器的支持,并包含FreeRTOS实时操作系统。STM32 Motor Control Workbench的更新版让客户可以直接访问固件示例和硬件抽象层(HAL)和底层(LL)API。

ST-MC-SUITE最初只支持BLDC(无刷直流电机)和PMSM(永磁同步电机)矢量控制(FOC)设计,计划在今年晚些时候开发出可支持更多类型的电机和控制技术。

了解详情或获取工具,请访问 https://www.st.com/st-mc-suite/home

或通过 https://blog.st.com/st-mc-suite-motor-control/ 浏览关于ST-MC-SUITE的博文。

围观 427

开篇问大家一个问题:STM32F103默认最高主频为72M,那么,其主频可以达到80M吗? 假如达到80M,程序能正常运行吗?

1、关于MCU主频

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

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

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

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

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

2、STM8主频时钟

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

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

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

  • 内部高速晶振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.

3、STM32主频时钟

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

(STM32F1时钟树)

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

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

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

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

1. STM32倍频

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

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

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

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

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

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

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

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

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

3. 超频死机

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

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

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

本文转自:微信号 - EmbeddDeveloper,作者:strongerHuang,转载此文目的在于传递更多信息,版权归原作者所有。

围观 537

意法半导体新推出的两款STM8* Nucleo开发板,让8位开发社区也能体验到STM32 * Nucleo系列开发板久经验证的易用性和可扩展功能。

STM8 Nucleo开发板沿用创建了无数个STM32嵌入式项目的成功方法,板载ST morpho排针让开发者能够充分利用STM8 MCU 的全部I / O引脚,而Arduino™Uno连接器让开发者能够利用开源Arduino兼容Shield生态系统的巨大资源,简化功能扩展。

这两款STM8 Nucleo开发板的主要配套开发工具链包括Cosmic IDEA工具链、IAR™EWSTM8集成开发环境和意法半导体免费的STVD IDE。支持拖放式闪存烧写操作等便捷功能可加快重复性设计。每款开发板都集成一个ST-LINK调试器/烧写器,开发者无需另购调试探针。

通过增加这些入门级STM8配置, Nucleo开发板的型号现已达到40多个,覆盖意法半导体8位和32位微控制器全系产品的所有性能、功耗和存储器组合。产品创建过程顺畅、灵活,连到开源硬件社区方便快捷,随时随意调整或优化软硬件,这些优点有助于消除项目风险,并最大限度地缩短产品上市时间。

The new NUCLEO-8S208RB and NUCLEO-8L152R8 boards (including 64-pin STM8S208 and STM8L152 microcontroller respectively) are available now, priced from $10.32.

新开发板NUCLEO-8S208RBNUCLEO-8L152R8(分别集成64引脚的STM8S208和STM8L152微控制器)现已上市。

详情联系当地经销商或访问 www.st.com/stm8nucleo

围观 251

前言

目前很多用户在使用 STM8 的时候使用了 16MHz 的内部振荡或者外部晶体来作为时钟源。事实上,STM8 家族中有些系列是支持最高 24MHz 主频的,比如 STM8S207、STM8AF52,等等。那么,需要更快的运行速度时,是否只需要使用更高的主频就可以直接运行了呢?

问题

某客户在其产品的设计中,使用了 STM8AF52A9。客户工程师称其一段以前已经验证过的代码,使用 STVP 下载后无法正常运行。但是他试过在 IAR for STM8 中是可以正常调试的,不知道为何使用 STVP 后就无法正常工作了呢?

调研

1.了解问题

使用编译好的.s19 文件使用 STVP 烧写到 STM8AF52A9,发现上电后是无法正常工作的。观察用户代码,在 IAR 中进入调试状态,可以断点调试,单步调试,都可以。不过,最后发现在线调试时,一旦运行到以下代码时,程序就死掉了。

status = CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE, DISABLE,
CLK_CURRENTCLOCKSTATE_DISABLE);

2.分析问题

STM8 上电后默认的主时钟源为内部 HSI RC 时钟的 8 分频,即 fHSI/8。原因是 HSI 时钟的稳定时间短,而 8 分频可保证系统在较差的 VDD条件下安全启动。等主时钟源稳定后,用户可以自行将主时钟切换到其他时钟源上。

先来看一下刚才这个函数的原型:
ErrorStatus CLK_ClockSwitchConfig(CLK_SwitchMode_TypeDef CLK_SwitchMode,
CLK_Source_TypeDef CLK_NewClock, FunctionalState ITState, CLK_CurrentClockState_TypeDef
CLK_CurrentClockState)

它的作用在于切换时钟源。CLK_SwitchMode 代表使用的切换方式,有自动切换和手动切换;CLK_NewClock 代表新的时钟源;ITState 代表是否使能或禁用中断;CLK_CurrentClockState 代表切换后原时钟源的状态是否保持或关闭。所以,用户代码的意思就是:使用自动切换方式,切换主时钟到 HSE,不产生中断,切换后原主时钟源关闭。

切换主时钟源后程序就出问题这种情况,看来问题很可能出在 HSE 上,必须对外部晶振进行检测。原本思考是否 HSE 外部晶体的振荡是否存在什么问题,但是在使用示波器进行检测后发现 HSE 已经是在正常的振荡当中了,而且波形很漂亮。但是,在示波器上看到频率是 24MHz。检查晶体上的标记,果然是 24MHz 的频率。所以,客户在使用 STM8AF52A9 时,为了提高性能,使用了最高主频 24MHz。

客户所遇到的问题应该就出在 24MHz 的使用上了。客户以前使用都是 16MHz 的主频。STM8 要求,如果用户使用的主时钟频率超过了 16MHz,那么 Flash 以及 EEPROM 的访问需要配置 1 个等待周期。

STM8AF52A9 数据手册可见如下:

STM8使用24MHz外部晶振无法正常运行

参考手册 RM0016 在 HSE 的描述中,也提到了:

STM8使用24MHz外部晶振无法正常运行

对于选择 0 等待周期还是 1 等待周期,必须在选项字节中选择。检查芯片的选项字节,发现选择的是 0 等待周期,所以问题就是就出在这了。

3.问题解决

使用 STVP,在 OPTION BYTE 页面修改选项字节,将等待周期设置为 1 个等待周期,如下:

STM8使用24MHz外部晶振无法正常运行

下载更新芯片的选项字节,使用之前的.hex 文件,可以正常工作了。

结论

由于使用的 24MHz 主频已经超出 16MHz,而在选项字节中并没有修改等待周期为 1 等待周期,导致在 Flash 访问上存在问题,无法正常运行程序。

处理

需要修改选项字节,将等待周期修改为 1 等待周期。

来源:ST

围观 821
订阅 RSS - STM8