STM32单片机在Keil5下仿真的问题解决及GPIO口初始化、使用

STM32单片机在Keil5下仿真的问题解决及GPIO口初始化、使用

最近看了视频,里面有仿真,可以清楚看到GPIO口的数据变化,也想尝试下,DUG时却出现*** error 65: access violation at 0x40021000 : no 'read' permission,按照网上给的各种办法,包括修改memory map,以及其他各种办法,都无法解决,后来发现问题在下面这张图所示的位置:

STM32单片机在Keil5下仿真的问题解决及GPIO口初始化、使用_第1张图片

这个图上红色框中的两个参数是我修改之后的,原来的值是软件安装之后的默认值:

Dialog DLL默认是DCM3.DLL
Parameter默认是-pCM3

应改为

Dialog DLL默认是DARMSTM.DLL
Parameter默认是-pSTM32F103RC

然后就可以愉快的仿真了。

仿真过程:

点击Debug,然后点击Peripheral菜单项,然后在General Purpose I/O这儿选择你要看的管脚,我这里选择GPIOA,完成后点击setup添加PORTA.0  就可以看GPIOA_Pin0的信号了:

STM32单片机在Keil5下仿真的问题解决及GPIO口初始化、使用_第2张图片

借鉴这里的经验,在此感谢http://www.stmcu.org/module/forum/thread-599469-1-1.html

 

以下是一段GPIO口初始化及输出的使用的代码:

 1 #include
 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)应该如何设置呢?

STM32单片机在Keil5下仿真的问题解决及GPIO口初始化、使用_第3张图片

需要把右边的:

Dialog DLL默认是TARMSTM.DLL
Parameter默认是-pSTM32F103RC

保存之后点击Utilities,并进行如下设置:

STM32单片机在Keil5下仿真的问题解决及GPIO口初始化、使用_第4张图片

然后就可以使用jlink仿真了。

 

转载于:https://www.cnblogs.com/jiwangbujiu/p/5397408.html

你可能感兴趣的:(STM32单片机在Keil5下仿真的问题解决及GPIO口初始化、使用)