STC8H系列单片机IAP实现不停电下载(通过串口)

这篇具有很好参考价值的文章主要介绍了STC8H系列单片机IAP实现不停电下载(通过串口)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.前言

在使用串口往STC单片机烧录程序时,需要冷启动,先点击下载再上电。这样做有一定的缺点。首先,一些特殊的外围电路要求一直保持有电状态,有些客户需求我们能远程操控设备就可以升级程序,而不需要去现场断电设备。其次,频繁的断电上电操作也比较麻烦。

2. 实现原理

STC 单片机在硬件设计时,增加了一个软复位寄存器 (IAP CONTR),让用户可以通过设置此寄存器来决定 CPU 复位后重新执行用户代码还是复位到ISP 区执行ISP 系统代码。当向IAP CONTR 寄存器号入 0x20 时,CPU 复位后重新执行用户代码: 当向IAP CONTR 寄存器写入0x60 时,CPU 复位后复位到 ISP 区执行 ISP 系统代码。
要实现不停电进行 ISP 下载,我们可以在接收中断中加入等待一个特殊的串口命令,例如默认的“@STCISP#”。当我们发送命令,单片机接收检测到满足下载条件时,就通过软件触发软复位寄存器复位到 ISP区执行ISP 系统代码,从而实现不停电JSP 下载。
stc不停电下载,单片机,嵌入式硬件

我使用的是STC8H8K64U单片机,可以在STC官网查询自己的型号是否具有IAP功能。

stc不停电下载,单片机,嵌入式硬件

3. STC-ISP设置

有几点注意:(1)串口模式的波特率应该与程序中的保持一致
(2)“下次使用STC-HID接口进行ISP下载”不需要勾选
(3)“目标文件变化时自动装载并发送下载命令”可选可不选,如果选了的话你每编译一次它会自动发送命令帮你下载
stc不停电下载,单片机,嵌入式硬件

4. 中断接收程序

最开始我参考了另外一位博主写的中断接收程序,可以成功运行,链接附上!
STC8H8K64U单片机-免冷启动下载程序
但是后来在运用到别的程序上时出现了一些小问题。就是这一块代码部分:
stc不停电下载,单片机,嵌入式硬件
这段代码的含义是:检查接收计数器 COM1.RX_Cnt 的值是否大于等于8,即检查是否接收到了指定长度的数据。如果是,将接收计数器 COM1.RX_Cnt 的值重置为0,准备接收下一帧数据。这就导致了如果接收到的数据字节大于8,就会被重置,数据会丢失。
我当时想了一个修改方法是修改自定义命令的长度,例如设为“@STCISPHH”就可以修改接收10个字节的长度了,但是这个方法并不好用。因此我根据官方手册中的代码进行修改,在接收中断中加入一串命令函数,即使换到别的实验程序中也只需要拷贝过去即可,非常方便。
以官方例程《06-串口1中断模式与电脑收发测试》为例。

主函数

void main(void)
{
	u8	i;
  char index;
	
	EAXSFR();		/* 扩展寄存器访问使能 */
	GPIO_config();
	UART_config();
	EA = 1;
  index=0;
	
	PrintString1("STC8H8K64U UART1-UART3 Test Programme!\r\n");  //UART1发送一个字符串

	while (1)
    {
            delay_ms(1);
            if(COM3.RX_TimeOut > 0)		//超时计数
		        {
			        if(--COM3.RX_TimeOut == 0)
			        {
			         	if(COM3.RX_Cnt > 0)
				       {
				          for(i=0; i<COM3.RX_Cnt; i++)	TX1_write2buff(RX3_Buffer[i]);	//把收到的数据通过串口1转发
							 }
				              COM3.RX_Cnt = 0;
			         }
		      }
    } 
}

UART1中断函数

#ifdef UART1

char code*STCISPCMD="@STCISP#";
char index;


void UART1_ISR_Handler (void) interrupt UART1_VECTOR
{
	char dat;

	if(RI)
	{
		RI = 0;
		dat =SBUF;
		
		if(dat==STCISPCMD[index])
		{
			index++;
			if(STCISPCMD[index]=='\0')
				IAP_CONTR=0x60;
		}
		else
		{
		   index=0;
			 if(dat==STCISPCMD[index])
				index++;
		}
		if(COM1.RX_Cnt >= COM_RX1_Lenth)	COM1.RX_Cnt = 0;
    RX1_Buffer[COM1.RX_Cnt++] = SBUF;
    COM1.RX_TimeOut = TimeOutSet1;
	}

	if(TI)
	{
		TI = 0;
		
        #if(UART_QUEUE_MODE == 1)   //判断是否使用队列模式
		if(COM1.TX_send != COM1.TX_write)
		{
		 	SBUF = TX1_Buffer[COM1.TX_send];
			if(++COM1.TX_send >= COM_TX1_Lenth)		COM1.TX_send = 0;
		}
		else	COM1.B_TX_busy = 0;
        #else
        COM1.B_TX_busy = 0;     //使用阻塞方式发送直接清除繁忙标志
        #endif
	}
}
#endif

这样就可以实现不断电IAP下载啦,可以使程序更新更加便捷,无需断电冷启动就能实现程序的更新。
stc不停电下载,单片机,嵌入式硬件

5.方法总结

对于STC8H8K64U单片机,可以使用以下方法来实现在不需要断电冷启动的情况下更新程序:

(1)使用IAP功能:STC8H8K64U单片机内置了IAP(In-Application Programming)功能,可以通过IAP指令和相关函数来进行程序更新。可以使用IAP提供的函数,通过串口或其他通信方式将新的程序代码加载到单片机的存储器中,实现程序的更新。

(2)使用ISP接口:STC8H8K64U单片机提供了ISP(In-System Programming)接口,可以通过该接口连接到外部编程器或开发板上,实现对单片机的编程。通过连接编程器或开发板,可以直接更新单片机的程序,无需断电冷启动。

(3)使用Bootloader:可以在STC8H8K64U单片机的Flash中预留一部分空间作为Bootloader。Bootloader是一个特殊的程序,它用来接收和处理新程序的更新请求,并将新程序加载到单片机的存储器中。通过Bootloader,可以在不需要断电冷启动的情况下更新程序。

(4)使用USB-CDC虚拟串口。通过这个串口实现通信,代码里面定义了不停电自动ISP下载的命令,在STC-ISP里面就可以不断电自动ISP下载。
stc不停电下载,单片机,嵌入式硬件文章来源地址https://www.toymoban.com/news/detail-770583.html

到了这里,关于STC8H系列单片机IAP实现不停电下载(通过串口)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STC8H8K64U单片机-ADC采集数

    配置单片机的ADC时一定要将IO口配置成高阻输入模式, 以下是单片机引脚对应的ADC通道  

    2024年02月07日
    浏览(33)
  • 一键使用PWM并输出,STC8H系列库函数,PWM外设教程

    随着STC单片机的发展,外设功能也不断增加,开发时间也慢慢的延长了很多博主为了缩短开发时间自己开发了一种库文件。可以一键使用外设,顾名思义就是我们不用再去配置寄存器不用再去看开发手册只需要对外设有一定了解便可以非常灵活的使用这个库函数,并且我在每

    2024年02月15日
    浏览(37)
  • STC8H驱动hub75e接口的64*64LED点阵屏

    由于最近在做毕业设计,应导师要求学习LED点阵屏的显示原理,学习并驱动hub75e接口的64*64LED点阵屏。点阵屏上一个点有三个颜色分量R,G,B,1为亮,0为灭。当这个点为110时,颜色为红色和绿色的混合--黄色。          hub75e接口如上图所示,其中R1/G1/B1和R2/G2/B2为两个R

    2024年02月11日
    浏览(53)
  • 51单片机(STC8) -- 开发环境搭建(Keil C51)

    STC8H3K系列芯片概述 文章中所用的芯片选型为STC8H3K64S4,后续STC8案例均以该芯片展开 内核 • 超高速 8051 内核(1T),比传统 8051 约快 12 倍以上,指令代码完全兼容传统8051 • 21个中断源,4 级中断优先级 • 支持在线仿真 工作电压 • 1.9V~5.5V 工作温度 • -40℃~85℃ Flash 存储

    2024年01月25日
    浏览(44)
  • STC8G1K08单片机接收485发送的不等长混合数据

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 提示:以下是本篇文章正文内容,下面案例可供参考 这里以芯力特的485芯片为例如图1: 引脚功能: 1.接收器输出端(接单片机的RXD引脚) 2.接收器输出使能控制(接收器输出使能控制。当/RE 接低电平

    2024年02月16日
    浏览(30)
  • 单片机读/写端口或引脚区别及具体1个用例(一种基于STC8G1K08A最小8脚嵌入式单片机LED安全夜灯方案)

    51单片机读引脚和读端口测试总结_单片机怎么读取引脚电平_爱嘟嘟的小屁孩的博客-CSDN博客 近期看了几篇有关单片机读/写端口或引脚的区别的文章,其中上面引用本CSDN的这篇文章,总结的2点感觉还不错,先引用一下: 1. 51单片机里对某一个I/O口进行读--改--写(例如上面的

    2024年02月08日
    浏览(42)
  • 基于STC15系列单片机的智能门锁

    一、项目背景及功能需求 1.1项目背景 智能门锁是一种智能化、高效、安全的门锁,它可以实现密码识别开锁方式,极大地提高了门锁的安全性和便利性。随着人们对安全性的要求越来越高,智能门锁已经成为了现代家庭和企业的必备设备。因此,本项目旨在设计一款基于S

    2024年02月04日
    浏览(49)
  • STC15系列单片机学习4:串口通讯

    在使用单片机的串口前,得先知道所使用的单片机有几个串口,再结合你的硬件电路图来使用哪个串口。 以下是STC15各系列单片机的串口数量,STC15W4K32S4系列有4个串口 工作模式0:同步移位寄存器(官方建议初学者不学) 工作模式1:8位串口,波特率可变 工作模式2:9位串口

    2024年04月13日
    浏览(33)
  • STC15系列单片机学习6:外部中断

    外部中断,就是通过单片机IO引脚电平的变化触发的中断。 STC15系列单片机的外部中断源一共有5个,分别是外部中断0(INT0)、外部中断1(INT1)、外部中断2(INT2)、外部中断3(INT3)、外部中断4(INT4);当然不是所有的STC15系列单片机都有着5个外部中断。 中断源 触发行为

    2024年03月12日
    浏览(98)
  • stc89C51系列单片机介绍

    STC89C51 是一款基于 8051 内核的高性价比单片机,由国内的 STC 微电子公司生产。STC89C51 系列单片机的特点是具有高速运行、丰富的外设接口、广泛的应用领域等优点。本文将从以下几个方面介绍 STC89C51 系列单片机。 STC89C51 系列单片机基于 80C51 内核,具有 1T 和 2T 两种不同的时

    2024年02月01日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包