Keil MDK 仿真时System Viewer菜单显示空白和Peripherals菜单无外设寄存器
最近看了视频,里面有仿真,可以清楚看到GPIO口的数据变化,也想尝试下,DUG时却出现*** error 65: access violation at 0x40021000 : no 'read' permission,按照网上给的各种办法,包括修改memory map,以及其他各种办法,都无法解决,后来发现问题在下面这张图所示的位置:
这个图上红色框中的两个参数是我修改之后的,原来的值是软件安装之后的默认值:
Dialog DLL默认是DCM3.DLL
Parameter默认是-pCM3
应改为
Dialog DLL默认是DARMSTM.DLL
Parameter默认是-pSTM32F103RC
然后就可以愉快的仿真了。
仿真过程:
点击Debug,然后点击Peripheral菜单项,然后在General Purpose I/O这儿选择你要看的管脚,我这里选择GPIOA,完成后点击setup添加PORTA.0 就可以看GPIOA_Pin0的信号了:
借鉴这里的经验,在此感谢http://www.stmcu.org/module/forum/thread-599469-1-1.html
以下是一段GPIO口初始化及输出的使用的代码:
1 #include<stm32f10x.h> 2 3 int main(){ 4 5 //定义一个GPIO初始化结构体,要在RCC使能之前定义,否则会报错 6 GPIO_InitTypeDef GPIO_InitStruct; 7 8 //初始化RCC并使能 9 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); 10 11 //设置要初始化的GPIO的管脚 12 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; 13 14 //设置要初始化的GPIO的速度 15 GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; 16 17 //设置要初始化的GPIO的模式 18 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; 19 20 //调用初始化函数,传入参数为GPIO初始化结构体的地址 21 GPIO_Init(GPIOA, &GPIO_InitStruct); 22 23 //在循环中给GPIO_Pin_1不断置位复位,也就是给高低电平,可以用来点亮对应管脚的led 24 while(1){ 25 26 //GPIO管脚置位函数,第一个参数为那个GPIO口,第二个为GPIO口的第几个引脚 27 GPIO_SetBits(GPIOA, GPIO_Pin_0); 28 29 //GPIO管脚复位函数,第一个参数为那个GPIO口,第二个为GPIO口的第几个引脚 30 GPIO_ResetBits(GPIOA, GPIO_Pin_0); 31 } 32 33 34 35 36 37 return 0; 38 }
以上是使用软件仿真的设置,那么硬件仿真(jlink)应该如何设置呢?
需要把右边的:
Dialog DLL默认是TARMSTM.DLL
Parameter默认是-pSTM32F103RC
保存之后点击Utilities,并进行如下设置:
然后就可以使用jlink仿真了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律