当前位置:网站首页 > 技术经理的晋升之路 > 正文

单片机程序烧录连接线路图(单片机烧录程序怎么接线)



图2.2.1 SEGGER J-Flash下载程序

MCU内部都是首先执行一段独立的Boot代码(这段Boot代码一般是出厂预置,或使用编程器烧录,通常只有1k或4k,SST通常是占用一块独立的Block,Philips通常是让BootROM地址与其他Flash重叠,以达到隐藏的效果),Boot负责控制擦除程序存储器及给程序存储器编程的代码(或是处理器外部提供的执行代码),然后通过某种与PC计算机的通信方式(如Ethernet网口),将用户指定的某个在PC上编译完成的MCU可运行的二进制代码文件编程入MCU内的程序存储器。

--------------------------------

ISP和IAP最大的不同是:由谁来触发进入BootROM。

ISP有4种触发方式:

1)由外部硬件电路:如VDD保持高电平,给RST连续3个脉冲;

2)检测状态位:如ISPEN,为0时PC指针从0000H开始执行;为1时,通过“引导向量”计算出“ISP代码”的位置。每次复位后都会检测该状态位;

3)中止控制符信号触发芯片复位:中止控制符信号就是指在异步串行口的接收脚上出现长 达一帧长度的低电平,这里一帧的长度与异步串行口的工作模式有关。

4)直接调用ISP:用户程序也可以调用,但是很危险。

--------------------------------

4种方式的目的相同,即进入ISP子程序。比如Philips出厂的ISP子程序在1E00H~1FFFH,只要能引导PC指针指向1E00H就可以了。进入ISP代码的目的是进入BootROM。

IAP的触发简单一些,没有外部触发。通过一些指示位(SST为SC0/SC1、SFCF[1,0];Philips为一段IAP子程序,保存在FF00H~FFFFH地址空间中),达到引导至BootROM的目的。

殊途同归,ISP、IAP所进入的BootROM里面驻留的Boot代码,才是最终目标。

--------------------------------

举例说明:CAN总线实现STM32的IAP

使用STM32F105RCT6的CAN通信做IAP,实现固件的远程更新功能。IAP的实现包括两个程序:BootLoader和应用程序。启动过程先启动BootLoader,等待1S,若接收到烧写指令则开始更新程序,若无指令则启动应用程序。应用程序接收到更新指令后,切换到BootLoader。

远程程序更新需要防止更新失败后,程序卡死,只能通过人工现场更新的情况。可以使用看门狗实现重启返回BootLoader,给重新烧写留出时间。

实现IAP流程,需要的工作包括:

(1)规划单片机存储区,设置中断向量位置,生成应用程序Bin文件

(2)编写BootLoader,实现应用程序切换

(3)编写远程更新上位机,实现通信协议

(4)插入看门狗程序,实现烧写失败后重启

-----------------

1)规划单片机存储区,设置中断向量位置,生成应用程序Bin文件

STM32F105RCT6的Flash共256KB,规划Flash空间:  

0x0~0x0 共16KB空间,给BootLoader

0x0~0x0 共48KB空间,给应用程序

0x0~0x0 共16KB空间,保留

0x0~0x0 共16KB空间,给配置

单片机应用程序在起始地址中的结构,首先是中断向量,然后是代码。

中断向量的结构:开头4字节堆栈指针,接下来是4字节reset函数地址,之后是其他中断函数的地址。

单片机开机后,从0x0处取得SP,然后从0x0处取得reset地址作为PC,在Reset函数中调用main函数,进入C语言控制的程序中。

在Keil中的Options -> Target -> IROM 填写应用程序的起始和长度,并在Linker -> Use Memory Layout from Target Dialog中打钩。

在应用程序中,调用NVIC函数,设置中断向量位置为0x0。

生成应用程序的bin文件:Keil中,在Options -> User -> After Build -> Run 中输入指令 fromelf.exe --bin -o ..w01simbinmcubincanext.bin .obj est.axf

-----------------

2)编写BootLoader,实现应用程序切换

建立一个普通的STM32工程,实现CAN通信和数据协议、Flash烧写等功能,当超时无指令,或烧写成功后,需要进行程序切换。

程序切换时,首先应关闭设备时钟、关闭中断,避免应用程序中未对设备进行初始化,导致Boot方式启动与冷启动有功能差别。

切换原理:模拟单片机上电过程,人工设置堆栈指针,调用应用程序入口函数。切换代码如下:

到此这篇单片机程序烧录连接线路图(单片机烧录程序怎么接线)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 华为模拟器路由器网关怎么配(华为模拟器路由器配置网关)2025-08-10 15:18:04
  • 网易云怎样获取对方位置(网易云怎么定位到别的地方)2025-08-10 15:18:04
  • max31865电路图(max3232电路图)2025-08-10 15:18:04
  • 反激电路的占空比怎么算(反激电路占空比计算)2025-08-10 15:18:04
  • 电路中ga是什么意思(电路中gs表示什么)2025-08-10 15:18:04
  • conda删除虚拟环境路径(conda虚拟环境路径怎么看)2025-08-10 15:18:04
  • 反激电路工作原理视频(反激电路工作原理图)2025-08-10 15:18:04
  • tp9950电路图(tp5000电路图)2025-08-10 15:18:04
  • 路由守卫有哪些职位(路由守卫有哪些职位名称)2025-08-10 15:18:04
  • ubuntu源文件路径(ubuntuyum源)2025-08-10 15:18:04
  • 全屏图片