前言:
首先简单介绍一下外界干扰对单片机的2点影响:
(1)异常复位
在刚上电或外部复位引脚为复位电平时,单片机系统进入一个预定的状态——复位状态。在复位状态下,控制寄存器的值是确定的,而数据寄存器的值是随机的,程序计数器也被赋予一个确定的值。但多数情况下控制寄存器的初始值并非我们需要的,不确定的数据寄存器的值也是无法使用的,需要初始化把它们设置成一个预期的、确定的且安全的状态。初始化完成后,系统进入待命状态。系统在工作过程中,因来自电源的干扰,也可能执行复位操作,称为异常复位,这时如不采取措施,记录工作过程的数据又会被初始化,从而造成异常停机。
(2)程序跑飞
所谓程序跑飞是程序没按预定的顺序执行。因为单片机执行了不该执行的指令,该指令一旦执行,系统的状态就发生改变且不能自动恢复,这时,系统处于失控制状态。
问题分析:
这里我们主要针对STM8S105系列单片机提出一种软件抗干扰的措施:
存在问题:使用STM8S105单片机控制电机正反转工作时,继电器的吸合和断开会对单片机产生电磁波干扰,使得单片机出现异常复位情况,造成系统停机。通过示波器检测单片机VCC,发现在继电器动作瞬间会对VCC产生较大冲击。
解决方案:
(1)硬件:合理布板;退耦、滤波以及隔离;加屏蔽(针对强电磁干扰下)
(2)软件:由于控制系统是通过计时器和外部端口的状态变化来驱动系统工作的,并通过数据寄存器记录工作过程,如果在异常复位的前后我们能保护记录工作过程的数据不变,在复位后系统就会继续工作,如同没发生过干扰一样。故我们应该将程序运行过程中的数据保存在数据寄存器中记录下当前运行位置。
解决过程:
(1)判断单片机是否产生EMS复位
STM8S105单片机为了避免由电磁干扰造成的对应用程序误写操作或系统挂起,大多数关键寄存器都有一个互补寄存器与之相对应。系统将会自动检测这些关键寄存器与其互补寄存器之间是否匹配。如果不匹配,则产生一个EMS复位,从而使应用程序恢复到正常操作。
如何判断单片机是EMS复位还是其他情况的复位(STM8S系列单片机有9个复位源):
通过IAR开发环境在线调试程序,观察当单片机受干扰复位时,复位状态寄存器(RST_SR)各个位的状态值。当位4置1时说明产生了EMC复位。
(2)配置相关数据寄存器用于保存项目程序运行中的数据
STM8S105系列单片机中有最多32K字节Flash和多达1K字节真正的数据EEPROM,可以保证数据在掉电后不丢失。这里我们采用EEPROM存储数据。
数据EEPROM(DATA)区域可用于存储用户具体项目所需的数据。默认情况下,DATA区域是写保护的,这样可以在主程序工作在IAP模式时防止DATA区域被无意地修改。只有使用特定的MASS密钥才能对DATA区域的写保护解锁。
相关程序:
chipeeprom.h头文件:
#ifndef _chipeeprom_h_
#define _chipeeprom_h_
/* 说明:主芯片STM8S105C4T6*/
/* 自定义宏 */
extern void WriteMultiBlockByte(u8 BlockStartAddress,FLASH_MemType_TypeDef
FLASH_MemType, FLASH_ProgramMode_TypeDefFLASH_ProgMode, uint8_t *Buffer,uint8_t BlockNum);
extern void ReadMultiBlockByte(u8 BlockStartAddress,uint8_t BlockNum,
uint8_t ReadBlockByte[]);
chipeeprom.c源文件:
#include "include.h"
/*******************************************************************************
****函数名称:
****函数功能:任意写多个Block字节
****入口参数:
BlockStartAddress 字节被写入的Block首地址
FLASH_MemType FLASH Memory操作类型
FLASH_ProgMode FLASH 编程模式
Buffer 要写进flash eeprom 的字节数组
BlockNum 要写进flash eeprom 的Block个数
****出口参数:无
****说明:每种型号的EEPROM的大小不一样,调用此函数的时候要注意将要写进的字节数组
的大小是否超过该型号的EEPROM的地址。
大容量的EEPROM的型号是STM8S208, STM8S207, STM8S007, STM8AF52Ax, STM8AF62Ax
EEPROM的地址是从0x004000到0x0047ff,共2048Byte,每个Block是128Byte,一共16个Block.
中容量的EEPROM的型号是STM8S105, STM8S005, STM8AF626x
EEPROM的地址是从0x004000到0x0043ff,共1024Byte,每个Block是128Byte,一共8个Block.
小容量的EEPROM的型号是STM8S103, STM8S003, STM8S903
EEPROM的地址是从0x004000到0x00427f,共1024Byte,每个Block是64Byte,一共10个Block.
********************************************************************************/
void WriteMultiBlockByte(u8 BlockStartAddress,FLASH_MemType_TypeDef FLASH_MemType,
FLASH_ProgramMode_TypeDef FLASH_ProgMode, uint8_t *Buffer,uint8_t BlockNum)
{
uint8_t BlockNum_Temp;
/* 解锁 flash data eeprom memory */
FLASH_Unlock(FLASH_MEMTYPE_DATA);
/* 等待 Data EEPROM area 解锁标志位置位*/
while (FLASH_GetFlagStatus(FLASH_FLAG_DUL) == RESET) ;
for(BlockNum_Temp=BlockStartAddress;BlockNum_Temp if(BlockNum_Temp>FLASH_DATA_BLOCKS_NUMBER) break; FLASH_ProgramBlock(BlockNum_Temp, FLASH_MemType, FLASH_ProgMode,Buffer+BlockNum_Temp*FLASH_BLOCK_SIZE); FLASH_WaitForLastOperation(FLASH_MemType); } FLASH_Lock(FLASH_MEMTYPE_DATA);/*操作完要加锁*/ } /******************************************************************************* ****函数名称: ****函数功能:任意读多个Block字节 ****入口参数: BlockStartAddress 读Block首地址 BlockNum 读多少Block ReadBlockByte[] 存放读到字节的数组 ****出口参数:无 ********************************************************************************/ void ReadMultiBlockByte(u8 BlockStartAddress,uint8_t BlockNum,uint8_t ReadBlockByte[]) { uint32_t add, start_add, stop_add; start_add = FLASH_DATA_START_PHYSICAL_ADDRESS+(u32)((BlockNum-1)*FLASH_BLOCK_SIZE); stop_add = FLASH_DATA_START_PHYSICAL_ADDRESS + (u32)(BlockNum*FLASH_BLOCK_SIZE); for (add = start_add; add < stop_add; add++) ReadBlockByte[add-FLASH_DATA_START_PHYSICAL_ADDRESS]=FLASH_ReadByte(add); } 主函数(这里只列举了关于EEPROM读写的相关程序代码) #include "include.h" u8 WriteBuffer[FLASH_BLOCK_SIZE]; //设置一个数组用于保存程序运行中的数据 u8 ReadBuffer[FLASH_BLOCK_SIZE]; void main(void) { ...... WriteMultiBlockByte(0,FLASH_MEMTYPE_DATA,FLASH_PROGRAMMODE_STANDARD,WriteBuffer,1); ...... ReadMultiBlockByte(0,1,ReadBuffer); }
上一篇:单个按键,实现单击+双击+长按
下一篇:KT1025A关于看门狗或者复位的解决方案
推荐阅读
史海拾趣
Davico Industrial Ltd公司发展故事一:技术突破与创新
Davico Industrial Ltd公司自创立以来,始终将技术创新作为企业发展的核心动力。在公司成立初期,面对电子行业竞争激烈的局面,Davico凭借对市场的敏锐洞察和对技术的不断追求,成功研发出了一款具有划时代意义的电子元器件。这款产品以其高性能、低能耗的特点,迅速在市场中占据了一席之地。此后,Davico不断加大对研发的投入,通过引进高端人才、建立先进的研发实验室等举措,持续推出了一系列具有竞争力的新产品,为公司的发展奠定了坚实的基础。
Davico Industrial Ltd公司发展故事二:市场拓展与品牌建设
随着技术实力的不断增强,Davico开始积极拓展国内外市场。公司通过与国内外知名企业的合作,不断提升产品的知名度和美誉度。同时,Davico还积极参与各类行业展会和论坛,展示公司的最新成果和技术实力,赢得了广大客户的认可和信赖。在品牌建设方面,Davico注重塑造企业形象和文化内涵,通过广告宣传、公益活动等方式,提高了品牌的社会影响力和知名度。
Davico Industrial Ltd公司发展故事三:质量管理与持续改进
Davico深知产品质量对于企业生存和发展的重要性。因此,公司始终将质量管理放在首位,建立了完善的质量管理体系和检测手段。通过对生产过程的严格控制和对产品质量的不断追求,Davico的产品在市场中赢得了良好的口碑。同时,公司还积极开展持续改进活动,通过引进先进的生产设备和工艺、优化生产流程等措施,不断提高生产效率和产品质量。
Davico Industrial Ltd公司发展故事四:人才战略与团队建设
Davico高度重视人才队伍建设,通过制定合理的人才战略和激励机制,吸引了一批批优秀的人才加入公司。公司注重员工的培训和发展,通过定期的技能培训、知识更新等活动,不断提升员工的综合素质和专业技能。同时,Davico还建立了完善的团队协作机制,鼓励员工之间的沟通和合作,形成了一支高效、团结、富有战斗力的团队。
Davico Industrial Ltd公司发展故事五:绿色发展与社会责任
随着全球环保意识的不断提高,Davico积极响应国家绿色发展的号召,将环保理念融入到企业的生产经营中。公司通过引进环保设备、改进生产工艺等措施,降低了生产过程中的能耗和污染排放。同时,Davico还积极参与社会公益事业,通过捐款捐物、扶贫济困等方式,回馈社会、造福人民。这些举措不仅提升了企业的社会形象,也为公司的长远发展注入了新的动力。
随着科技的不断进步,Axon' Cable公司逐渐将业务拓展至航空航天领域。公司研发出了一系列高性能、高可靠性的数据网络系统和连接器产品,成功应用于众多重要的航空航天项目中。这些产品的成功应用不仅提升了Axon' Cable在航空航天领域的知名度,也为公司带来了丰厚的利润和更广阔的发展空间。
随着公司规模的扩大和市场的拓展,Amphenol公司开始实施全球扩张和多元化战略。公司不仅在美国本土设立了多个生产基地,还在欧洲、亚洲等地建立了分公司和研发中心。此外,Amphenol公司还积极涉足电子连接器等其他领域,进一步丰富了公司的产品线。这些举措不仅增强了公司的市场竞争力,也为公司的长期发展奠定了坚实的基础。
进入21世纪后,随着新能源汽车产业的兴起,FORYARD敏锐地捕捉到了这一市场机遇。公司开始将研发重心转向汽车电子领域,特别是新能源汽车的电池管理系统(BMS)和电机控制器(MCU)等关键技术。通过持续的技术创新和研发投入,FORYARD成功开发出了一系列高性能、高可靠性的汽车电子产品,并成功应用于多家知名新能源汽车制造商的车型中。这一举措不仅为公司带来了新的增长点,也推动了新能源汽车产业的快速发展。
随着业务的不断扩展,FORYARD意识到全球化布局的重要性。1995年,公司决定在中国设立研发中心和生产基地,以利用当地丰富的人才资源和成本优势。这一战略决策极大地提升了FORYARD的产能和研发效率,同时也使其能够更好地服务全球客户。此后,FORYARD还陆续在欧洲、亚洲等地建立了多个分支机构,形成了覆盖全球的研发、生产和销售网络。通过全球化布局,FORYARD不仅增强了自身的市场竞争力,还促进了全球电子产业的交流与合作。
基于 TPS62300 高频降压转换器的小型解决方案可实现动态电压管理 源:ti.com.cn 豪华的单片机开发系统498元 可稳定视频输出的: S3C2410 ARM9开发板780元DSP5402学习开发板II200元 暑期大优惠:S3C44B0开发板(标准版)350元 单片机以太网开发板 180元 DSP5402学习开发板II200元 ...… 查看全部问答∨ |
1.概述 虽然Linux可以在任何一台386以上的PC上运行,目前大多数人使用的都是新型的,带有各种外设的桌面PC或者笔记本电脑,这样,电源管理功能(PM)就逐渐变得越来越重要。在笔记本电脑上电源管理可以节能,延长电池寿命,而在桌面PC上它 ...… 查看全部问答∨ |
水文遥测系统通常由终端机、中继站和中心站三部分组成。由于终端机是用来直接测量雨量、水位等水文数据,是整个遥测系统信息的来源,故其设计成为整个遥测系统的关键。遥测终端机一般处于河流上游或者湖泊边缘,分布分散,维护起来很不方便,需要长 ...… 查看全部问答∨ |
整理了一天,打印时记得用双面A4,因为是按照双面排版的! 下载了记得顶一下,本人刚注册的号,积分不多,帮忙挣点积分了好下载资料,在此谢过了!! (本教材中有少部分图片不是很清楚,不过不影响大局 ...… 查看全部问答∨ |
在wince下用mfc的dialog类编程,我在resource中加入了菜单,然后通过下面代码加入到dialog的init中,实现了wince下dialog中添加菜单的功能 SHMENUBARINFO m_menu_bar; ZeroMemory(&m_menu_bar, ...… 查看全部问答∨ |
|
pos端疑问(请有实际开发经验的同仁帮忙解答) (有分连接) 本人目前所在项目是做一个pos对端服务系统,通过socket负责解析pos传送过来的封包数据。现在pos那端提出他们不支持断点续传功能,也就是假设时间段内发送1000个数据包,有任意一条出错就必须从头再传,基于程序设计逻辑考虑这样肯定是不合适的。pos ...… 查看全部问答∨ |
设计资源 培训 开发板 精华推荐
- Allegro MicroSystems 在 2024 年德国慕尼黑电子展上推出先进的磁性和电感式位置感测解决方案
- 左手车钥匙,右手活体检测雷达,UWB上车势在必行!
- 狂飙十年,国产CIS挤上牌桌
- 神盾短刀电池+雷神EM-i超级电混,吉利新能源甩出了两张“王炸”
- 浅谈功能安全之故障(fault),错误(error),失效(failure)
- 智能汽车2.0周期,这几大核心产业链迎来重大机会!
- 美日研发新型电池,宁德时代面临挑战?中国新能源电池产业如何应对?
- Rambus推出业界首款HBM 4控制器IP:背后有哪些技术细节?
- 村田推出高精度汽车用6轴惯性传感器
- 福特获得预充电报警专利 有助于节约成本和应对紧急情况
- 一加Nord N20渲染图曝光:外形似华为P50
- 基于Android 12!三星OneUI 4.0正式版推送:升级机型名单公布了
- 三星Galaxy A03 Core首亮相 采用紫光展锐芯片组
- 麒麟9000见底?骁龙888 4G版华为P50 Pro要来
- iPhone 14新渲染设计图出炉:正面去刘海、侧滑副屏为亮点
- 联发科最新 5G芯片天玑700问市,八核CPU架构+UltraSave 省电技术
- Yole:CIS供不应求,中国或能够实现自主可控第一步
- AMD 7nm工艺再添新利器,V2000系列嵌入式处理器问市
- 以色列科技公司Cellwize获3200万美元融资,英特尔、高通领投
- 定下300年规划后,软银在投资上一路狂奔