资源简介
包含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串口助手,支持和单片机中文通信
相关资源
- 基于MSP430F149单片机的语音播报模块使
- STM32F207的串口_IAPBootloader程序
- Quartus_II_13.1 64位破解器
- 使用Verilog+quartus2+ModelSim仿真UART串口通
- RN8209C及D初始化及UART通讯参考程序.
- Quartus II设计正弦信号发生器
- Quartus_18.1 破解器
- RN8209计量芯片UART通讯
- Quartus II 14.0 和破解(windows版)
- quartus II 13.0 SP1破解文件 密码:12345
- Quartus II 14.0 地址 破解 Win8 Win10 Win8.
- FPGA中电子钟的设计与实现
- 模10计数器
- 序列脉冲检测器
- 循环码计数器
- FPGA实现UART串口通信最全资料
- 基于Quartus的数字钟代码
- mfi iap2 src
- fpga源码程序(VHDL)
- SpringBoot集成Redis,Webservice,kafka,q
- verilog uart串行接收发送程序
- quartus II 11.0破解
- Quartus_II_9.1破解器.exe
- quartus Ⅱ7.2 破解包
- Virtex-6 UART控制器
- quartus2自动售货机程序基于verilog语言
- 微信小程序_HiApp聊天工具源代码
- 八路彩灯Quartus仿真
- stc8a8k64s4a12掉电保存
- Quartus 18.0 破解器解压密码12345
评论
共有 条评论