stm32l01系列单片机通过串口编程(ISP)
来源:互联网 发布:宁远县优化办 编辑:程序博客网 时间:2024/06/05 02:32
通过串口给stm32l01系列单片机编程方法总结
官方给出的ISP软件(串口烧录软件)FlashLoader Demonstrator不支持stm32l01系列的单片机那么我们怎么使用串口给这个型号的单片机通过串口烧录程序呢?
最近做了一个项目有这方面的需求,所以研究了一下这个方法,在此分享出来给有需要的人。准备工具只需mcuisp(也称flymcu)软件,串口助手
给懒人提供mcuisp软件mcuisp
经过我的试验mcuisp可以给这个单片机编程但是不能擦除这个芯片,后来我发现这个芯片的擦除指令不一样有兴趣的同学可以读一读这个文档AN3155 (USART protocol used in the STM32 bootloader)去度娘搜。
所以我们现在的任务就是想办法擦除这个芯片然后通过mcuisp这个软件下载进去(我的想法就是已经有了的工具知道原理后直接拿来用也无妨),AN3155资料里详细介绍了每个指令的用法,我们主要读擦除指令部分
这个芯片支持Extended Erase Memory Command,但是它不支持这个指令里的高级指令,所以想擦除这个芯片必须用最麻烦的那个步骤。一页一页的进行擦除,我的这个芯片有16k flash每页有128b所以一共有128页需要擦除,如果一条一条的发指令最少需要129条指令发,所以我用Qt写了一个串口上位机帮助我完成这个繁琐的过程。Qt我用的还不是太熟练基本上是还没看到门槛的状态,在这里提供解决思路,如果有想借鉴的话在本帖下面回复我可以把主要代码共享出来。
另外我用的这个芯片支持用户自定义boot选项所以配合这个用着就更爽。选择boot区的代码如下:
void BOOTCONF_User() //判断系统从哪启动如果从systemflsh启动更改选项字节使其从 //Flash program memory启动{ HAL_StatusTypeDef status = HAL_OK; uint32_t tmp = 0U, tmp1 = 0U; if (LL_SYSCFG_GetBootMode() == LL_SYSCFG_BOOTMODE_SYSTEMFLASH) { tmp = OB->USER & (~0XE000); tmp |= (1u << 15); tmp1 = (~tmp) << 16; tmp |= tmp1; HAL_FLASH_OB_Unlock(); status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE); { OB->USER = tmp; FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE); } HAL_FLASH_OB_Launch(); HAL_FLASH_OB_Lock(); }}
void BOOTCONF_System()//接收到编程指令后怎么触发自己定义,让芯片进入system bootloader{ HAL_StatusTypeDef status = HAL_OK; uint32_t tmp = 0U, tmp1 = 0U; tmp = OB->USER | 0X00E000; tmp &= 0X00BFFF; tmp1 = (~tmp) << 16; tmp |= tmp1; HAL_FLASH_OB_Unlock(); FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE); { OB->USER = tmp; FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE); } HAL_FLASH_OB_Launch(); HAL_FLASH_OB_Lock();}
0 0
- stm32l01系列单片机通过串口编程(ISP)
- STC12C5A系列单片机串口编程
- 串口ISP方式下载单片机程序设计
- 华邦单片机ISP编程方法
- 利用串口对 89S 系列单片机编程
- 51单片机程序下载、ISP及串口基础知识
- 51单片机stc-isp串口下载以及它的设置
- stc51系列单片机串口配置
- (C51学习五)单片机与PC通过串口通信
- AVR单片机ISP接口
- 单片机的ISP是什么
- 单片机怎么擦除程序,串口一直发数据来 STC-ISP一下载就关闭
- 51系列单片机之串口通信
- UART0串口编程系列(一)
- UART0串口编程系列(二)
- UART0串口编程系列(三)
- UART0串口编程系列(四)
- UART0串口编程系列(五)
- CentOS下yum安装、源的选择及介绍。 yum command not found
- leetcode:3. Longest Substring Without Repeating Characters
- linux和mac下配置seetaface
- 欢迎使用CSDN-markdown编辑器
- 对象装xml中CDATA问题
- stm32l01系列单片机通过串口编程(ISP)
- Matlab笔记:对数组的基本操作
- Java中基本数据类型和包装器类型的关系
- Android仿ios加载时菊花图
- linq指定列查询、去重复、排序、top行
- left join on and与left join on where的区别
- Android中应用调用系统权限
- 标签meta link 表格
- 使用sfl4j和logback在spring boot中进行日志配置