专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
arm板每次下载后只能运行一个程序,如何能下载两个程序切换运行?
2019-07-20 20:23
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
3644
9
1121
譬如通过按键切换不同程序的执行,该怎么做呢?
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
xfcjava3
1楼-- · 2019-07-22 02:57
楼主请看如下的程序片段:
说明: 1、上电之前Esc+Space按键同时按下,执行:虚拟U盘功能---->设置键盘功能。
2、如果上述按键没有按下,执行正常的键盘功能.
稍微修改一下,完全可以实现你的 “通过按键切换不同程序的执行”!
#define FirmwareUpgradeAddress ((uint32_t)0x08018400) //固件升级程序地址
#define ApplicationAddress ((uint32_t)0x08010000)
#define KEY_MAPS_FILE_ADDR ((uint32_t)0x08018000) //0x08013000+0x5000
typedef void (*pFunction)(void);
pFunction Jump_To_Application;
void Run_Process_Exchanged(void)
{
/* Jump to code loaded in NOR memory and execute it ******/
JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
Jump_To_Application = (pFunction) JumpAddress;
/* Initialize user application's Stack Pointer */
__set_MSP(*(__IO uint32_t*) ApplicationAddress);
Jump_To_Application();
}
void FirmwareUpgrade_Process_Exchanged(void)
{
/* Jump to code loaded in NOR memory and execute it *********/
JumpAddress = *(__IO uint32_t*) (FirmwareUpgradeAddress + 4);
Jump_To_Application = (pFunction) JumpAddress;
/* Initialize user application's Stack Pointer */
__set_MSP(*(__IO uint32_t*) FirmwareUpgradeAddress);
Jump_To_Application();
}
/****************************************************************************
* 功 能: 主函数
*-----------------------------------------------------------------------------------------------------------*
* 入口参数:
* 出口参数:
****************************************************************************/
int main(void)
{
Set_System();
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x18400); //必须设置中断向量表
USART_Config();
TM1629_GPIO_Configuration();
TM1629_Display_Init();
memset(keymaps_udisk,0,1024);
memset(custom_buf,0,16*8); //清除数据
Keymaps_ReadFlash_Data(KEY_MAPS_FILE_ADDR);
flag_keymaps_rdok=Keymaps_Config_Process();
update_key(); //读取矩阵键盘扫描值
//usb键盘上电前,Esc+Space按键同时按下
if((key_matrix[0][0]==0)&&(key_matrix[3][5]==0)){
Run_Process_Exchanged(); //执行虚拟U盘功能---->设置键盘功能
while(1);
}
Key_BackLight_Ctrl(1);
TM1629_Display(&kled_disp,0); //关闭键盘控制板---背光照明
uart_printf (" +------------------------------------------------+ ");
uart_printf (" | CooCox RTOS Running........................... | ");
uart_printf (" +------------------------------------------------+ ");
if (RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET){ //如果系统已经从独立看门狗复位
RCC_ClearFlag();//清除复位标志
}
Get_UserKey_Data();
Get_UserTDESKey_Data();
CoInitOS(); /*!< Initial CooCox RTOS */
CoCreateTask(Task_Init, (void *)0, 10,&Task_Init_Stk[TASK_STK_SIZE-1], TASK_STK_SIZE);
CoStartOS();
while (1);
}
加载中...
imaginer
2楼-- · 2019-07-22 08:31
做成系统就可以跑很多程序了
加载中...
杏帘在望
3楼-- · 2019-07-22 13:20
目测要火,mark一个
加载中...
上一页
1
2
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
STM32开发板免费用活动
7 个回答
stm32 处理 DHT11占用太多时间,大家程序是怎么设计的
8 个回答
分享一个STM32单片机做的离线编程器代码
9 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
说明: 1、上电之前Esc+Space按键同时按下,执行:虚拟U盘功能---->设置键盘功能。
2、如果上述按键没有按下,执行正常的键盘功能.
稍微修改一下,完全可以实现你的 “通过按键切换不同程序的执行”!
#define FirmwareUpgradeAddress ((uint32_t)0x08018400) //固件升级程序地址
#define ApplicationAddress ((uint32_t)0x08010000)
#define KEY_MAPS_FILE_ADDR ((uint32_t)0x08018000) //0x08013000+0x5000
typedef void (*pFunction)(void);
pFunction Jump_To_Application;
void Run_Process_Exchanged(void)
{
/* Jump to code loaded in NOR memory and execute it ******/
JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
Jump_To_Application = (pFunction) JumpAddress;
/* Initialize user application's Stack Pointer */
__set_MSP(*(__IO uint32_t*) ApplicationAddress);
Jump_To_Application();
}
void FirmwareUpgrade_Process_Exchanged(void)
{
/* Jump to code loaded in NOR memory and execute it *********/
JumpAddress = *(__IO uint32_t*) (FirmwareUpgradeAddress + 4);
Jump_To_Application = (pFunction) JumpAddress;
/* Initialize user application's Stack Pointer */
__set_MSP(*(__IO uint32_t*) FirmwareUpgradeAddress);
Jump_To_Application();
}
/****************************************************************************
* 功 能: 主函数
*-----------------------------------------------------------------------------------------------------------*
* 入口参数:
* 出口参数:
****************************************************************************/
int main(void)
{
Set_System();
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x18400); //必须设置中断向量表
USART_Config();
TM1629_GPIO_Configuration();
TM1629_Display_Init();
memset(keymaps_udisk,0,1024);
memset(custom_buf,0,16*8); //清除数据
Keymaps_ReadFlash_Data(KEY_MAPS_FILE_ADDR);
flag_keymaps_rdok=Keymaps_Config_Process();
update_key(); //读取矩阵键盘扫描值
//usb键盘上电前,Esc+Space按键同时按下
if((key_matrix[0][0]==0)&&(key_matrix[3][5]==0)){
Run_Process_Exchanged(); //执行虚拟U盘功能---->设置键盘功能
while(1);
}
Key_BackLight_Ctrl(1);
TM1629_Display(&kled_disp,0); //关闭键盘控制板---背光照明
uart_printf (" +------------------------------------------------+ ");
uart_printf (" | CooCox RTOS Running........................... | ");
uart_printf (" +------------------------------------------------+ ");
if (RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET){ //如果系统已经从独立看门狗复位
RCC_ClearFlag();//清除复位标志
}
Get_UserKey_Data();
Get_UserTDESKey_Data();
CoInitOS(); /*!< Initial CooCox RTOS */
CoCreateTask(Task_Init, (void *)0, 10,&Task_Init_Stk[TASK_STK_SIZE-1], TASK_STK_SIZE);
CoStartOS();
while (1);
}
一周热门 更多>