关于stm32f030增加bootloader后外部中断不响应的问题
来源:互联网 发布:淘宝怎么看正品 编辑:程序博客网 时间:2024/06/01 08:09
问题描述:
最近在调试stm32f030芯片,增加bootloader后,可以正常跳转到应用程序,程序能够正常跑起来,但是却不进DMA中断,外部中断无法响应,这个问题找了好久....
源码:
void NVIC_Configuration(void){
uint32_t i = 0;/* Relocate by software the vector table to the internal SRAM at 0x20000000 ***/ /* Copy the vector table from the Flash (mapped at the base of the application load address 0x08001000) to the base address of the SRAM at 0x20000000. */for(i = 0; i < 48; i++){VectorTable[i] = *(__IO uint32_t*)(APPLICATION_ADDRESS + (i<<2));}/* Enable the SYSCFG peripheral clock*/RCC_APB2PeriphResetCmd(RCC_APB2Periph_SYSCFG, ENABLE); /* Remap SRAM at 0x00000000 */SYSCFG_MemoryRemapConfig(SYSCFG_MemoryRemap_SRAM);
}由于f030没有向量表,需要做地址映射,来达到程序跳转bootloader的作用。需要将程序的向量表拷贝到ram中,然后通过ram来获取程序的起始地址。
首先分析问题
由于SYSCFG寄存器的外部时钟被关闭了,所以造成外部中断无法响应。RCC_APB2PeriphResetCmd(RCC_APB2Periph_SYSCFG, ENABLE)函数是用来设置RCC->APB2RSTR的对应位,如果设置了这个对应位那么对应的外设的时钟就被关闭了。通过查找库文件我们发现这个只有在P_DeInit()中才会用而且是成对出现。要想将一个外设或者是寄存器的值恢复到出厂设置,连续调用两次即可,要是调用一次就会出现上述问题,当然我们调用两次也是可以的,先ENABLE然后再DISABLE;而下面的函数RCC_APB2PeriphClockCmd很简单,只是打开外设时钟。
最后看一下SYSCFG 寄存器:主要是用来重映射内存地址和管理外部中断连接到GPIO上。
其实就是我们的API调用错误,但是由于自己知识浅薄,所以也是多方查找才解决问题,所以分享出来,希望大家不要在这上面花费太多时间。
阅读全文
0 0
- 关于stm32f030增加bootloader后外部中断不响应的问题
- 关于STM32F030的ISP下载问题
- 【不算奇葩的问题】stm32外部中断一直响应
- 关于在MFC对话框,循环中失去焦点后不响应的问题
- 【STM32F030探索套件】序列之五: 外部中断
- 【STM32F030探索套件】序列之五 外部中断
- STM8外部引脚中断EXTI配置后,系统不断进入中断的问题
- stm32的外部中断问题
- Android3.1后Boot_COMPLETED广播不响应的问题
- Android3.1后Boot_COMPLETED广播不响应的问题
- Android3.1后Boot_COMPLETED广播不响应的问题
- Android3.1后Boot_COMPLETED广播不响应的问题
- Android3.1后Boot_COMPLETED广播不响应的问题
- Android3.1 后广播不响应的问题
- 关于点击uisearchbar后给屏幕增加手势的问题
- 关于DSP C6727外部中断的用法
- 关于STM32的外部中断服务程序
- struct 更改action后不响应问题
- H5移动端知识点总结
- nginx配置ajax请求跨域
- 面向对象设计对象之间关系---依赖、关联、聚合和组合
- HashMap的实现原理
- 谷歌游戏客户端登录
- 关于stm32f030增加bootloader后外部中断不响应的问题
- js 函数说 :我要一点一点,变得更好
- Spinner-----android 高级控件 (下拉列表)
- JDBC编程基础
- 私有数据成员的继承问题
- kafka集群安装
- 地图投影系列浅析(四)_ 投影坐标系
- app渠道分析
- iscsi