STM32单片机在Keil5下仿真的问题解决及GPIO口初始化、使用
最近看了视频,里面有仿真,可以清楚看到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仿真了。