资源简介
包含IAP.c和IAP.h;
IAP串口初始化函数;
串口中断函数;
IAP循环main函数(可参考);
IAP跳转应用程序段函数;
更新用户程序,写入FLASH函数;
STM32L4xx系列,STM32L452RET6调试成功,LL库配置;
2019/11/20 后期调了STM32L471VETx芯片,发现擦页不能用,最终找到问题是FLASH页码不连号,只用修改擦页函数的页码号就可以成功擦页,就不再上传了;
IAP串口初始化函数;
串口中断函数;
IAP循环main函数(可参考);
IAP跳转应用程序段函数;
更新用户程序,写入FLASH函数;
STM32L4xx系列,STM32L452RET6调试成功,LL库配置;
2019/11/20 后期调了STM32L471VETx芯片,发现擦页不能用,最终找到问题是FLASH页码不连号,只用修改擦页函数的页码号就可以成功擦页,就不再上传了;

代码片段和文件信息
#define IAP_MAIN
#include “IAP.h“
uint32_t iapbuf[512];//缓存
pFunction JumpToApplication;
u8 USART3_RxData[USART3_Rx_LEN] __attribute__((at(SaveAddress)));//串口接收缓存
/***************************************************************************************
** 函数名称: iap_write_appbin
** 功能描述: 更新用户程序,写入FLASH
** 参 数: appxaddr:应用程序的起始地址
** appbuf:应用程序CODE
** appsize:应用程序大小(字节)
** 返 回 值: None
****************************************************************************************/
void iap_write_appbin(u32 appxaddr u8 *appbuf u32 appsize)
{
u32 t = 0;
u16 i = 0;
u32 temp = 0;
u32 fwaddr = appxaddr;//当前写入的地址
u8 *dfu = appbuf;
for(t=0; t {
temp = (u32)dfu[3]<<24;
temp |= (u32)dfu[2]<<16;
temp |= (u32)dfu[1]<<8;
temp |= (u32)dfu[0];
dfu+=4;//偏移4个字节
iapbuf[i++] = temp;
if(i==512)
{
i = 0;
FLASH_WriteMoreData(fwaddr iapbuf 512);
fwaddr+=2048;//偏移2048 512*4=2045
}
}
if(i)
FLASH_WriteMoreData(fwaddr iapbuf i);//将最后的内容写入
}
/***************************************************************************************
** 函数名称: iap_load_app
** 功能描述: 跳转到应用程序段
** 参 数: appxaddr 用户代码起始地址
** 返 回 值: None
****************************************************************************************/
void iap_load_app(u32 appxaddr)
{
uint32_t jump2app;
__disable_irq();//关闭总中断
if (((*(__IO uint32_t*)appxaddr) & 0x2FFE0000 ) == 0x20000000)//检查栈顶地址是否合法
{
jump2app = *(__IO uint32_t*) (appxaddr + 4);//用户代码区第二个字节为程序开始地址(复位地址)
JumpToApplication = (pFunction) jump2app;
__set_MSP(*(__IO uint32_t*) appxaddr);//初始化用户程序的堆栈指针(用户代码区的第一个字用于存放栈顶指针)
JumpToApplication();//跳转到APP
}
}
/***************************************************************************************
** 函数名称: IAP_Usart_Init
** 功能描述: IAP串口初始化
** 参 数: BaudRate 波特率
** 返 回 值: None
****************************************************************************************/
void IAP_Usart_Init(uint32_t BaudRate)
{
LL_GPIO_InitTypeDef GPIO_InitStruct;
LL_USART_InitTypeDef USART_InitStruct;
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USART3);//串口时钟使能
//USART3引脚配置
GPIO_InitStruct.Pin = LL_GPIO_PIN_4 | LL_GPIO_PIN_5;//TX:PC4 RX:PC5
GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;//复用模式
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;//高速
GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;//推挽输出
GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;//上拉
GPIO_InitStruct.Alternate = LL_GPIO_AF_7;//复用模式7
LL_GPIO_Init(GPIOC &GPIO_InitStruct);//初始化引脚配置
//USART3配置
USART_InitStruct.BaudRate = BaudRate;//波特率
USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_9B;//9字节
USART_InitStruct.StopBits = LL_USART_STOPBITS_1;//1位停止位
USART_InitStruct.Parity = LL_USART_PARITY_EVEN;//偶校验
USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX;//开启TX、RX
USART_InitStruct.HardwareFlowControl = LL_
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5271 2019-10-31 13:00 STM32L4xx_通过UART写FLASH_IAP更新程序_LL库配置\IAP.c
文件 2731 2019-11-02 13:02 STM32L4xx_通过UART写FLASH_IAP更新程序_LL库配置\IAP.h
目录 0 2019-11-02 12:56 STM32L4xx_通过UART写FLASH_IAP更新程序_LL库配置
----------- --------- ---------- ----- ----
8002 3
- 上一篇:共享单车数学建模
- 下一篇:Qt串口助手,支持和单片机中文通信
相关资源
- Quartus II 15.0中仿真Altera三速以太网I
- Quartus II 15.0中仿真Altera三速以太网I
- stm32f030 IAP Demo(原创)
- 3人表决器 QuartusII
- Verilog FPGA UART串口控制器
- 硬件课程设计—流水灯(quartus软件
- UART转CAN或LIN的工具(Uart2any)和文档
- 曼彻斯特编解码_同步QuartusII工程
- CPLD Verilog数字密码锁 源码
- Qt 播放音频文件
- 用quartus 2编的全加器(原理图输入)
- 6相12拍步进电机控制器
- MQTT+串口(usart)透传
- Quartus EDA交通灯控制电路的设计实训报
- Quartus II 15.0中仿真DDR2 IP核
- 基于IAP15F2K61S2单片机的多路温度巡检
- STM32F042F6P6 Uart12DMA;发送中断接收
- IAP15f2k61s2
- STM32的IAP-Bootloader程序
- uart_tx.zip
- STM32F407 串口配置 串口1~6 六串口同时
- STM32F407_6个串口同时使用的代码
- s7epasrvx.exe CP2102_USB_to_UART_Bridge_Contro
- CP210x UsbToUART win7 64 bit
- quartus 11.0 破解包 全
- Quartusii十字交叉路口三色交通灯设计
- 中值滤波算法Quartus实现
- springmvc+Mybatis+axis2+webservice+quartz作业整
- VHDL简易交通灯设计 quartus 2
- quartus14.1破解包
评论
共有 条评论