IAP3

完成串口接收程序

参考前面的


uint8_t aRxBuffer;
HAL_UART_Receive_IT(&huart1, &aRxBuffer, 1);
 
 
uint8_t UART1RxBuff[100];
uint8_t UART1RxBuffCount;
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) 
{ 
	if(huart->Instance == USART1) 
	{ 
		UART1RxBuff[UART1RxBuffCount++] = aRxBuffer; //类似标准外设库函数
	} 
	HAL_UART_Receive_IT(huart, (uint8_t *)&aRxBuffer, 1) ; 

--------------------- 
作者:GKoSon 
来源:CSDN 
原文:https://blog.csdn.net/weixin_42381351/article/details/87176531 
版权声明:本文为博主原创文章,转载请附上博文链接!

只需要:

uint8_t UART1RxBuff[20*1024] __attribute__ ((at(0X20001000)));

即可

 

考虑接收完成的事情

http://www.stmcu.org.cn/module/forum/thread-606717-1-1.html

跳转函数!!

 while (1)
  {
		HAL_Delay(100);
		HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
    /* USER CODE END WHILE */
		if(HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin)==0)//一旦按下就是接地了 
		{
			HAL_Delay(10);
			if(HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin)==0)
			{
				printf("按键按下\r\n");
				if(((*(uint32_t*)(0X20001000+4))&0xFF000000)==0x20000000)//判断是否为0X20XXXXXX. WHY?
				{	 
					printf("代码合法 准备跳转\r\n");
					iap_load_app(0X20001000);//SRAM地址
				}
			}
		}

前面USART已经放置好了代码 自动放好的!! 我们现在要跳转

#if defined ( __CC_ARM )  // 使用Keil编译环境

__asm void MSR_MSP ( uint32_t ulAddr ) 
{
    MSR MSP, r0            //set Main Stack value
    BX r14
}

#elif defined ( __ICCARM__ ) // 使用IAR编译环境

void MSR_MSP ( uint32_t ulAddr ) 
{
    asm("MSR MSP, r0");   //set Main Stack value
    asm("BX r14");
}


#endif
typedef  void (*iapfun)(void);				//定义一个函数类型的参数.
iapfun jump2app; 
void iap_load_app(uint32_t appxaddr)
{
	if(((*(uint32_t*)appxaddr)&0x2FFE0000)==0x20000000)	//检查栈顶地址是否合法.
	{ 
		jump2app=(iapfun)*(uint32_t*)(appxaddr+4);		//用户代码区第二个字为程序开始地址(复位地址)		
		MSR_MSP(*(uint32_t*)appxaddr);					      //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)
		jump2app();									                  //跳转到APP.
	}
}		 

好了 代码写完准备测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值