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


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仿真了。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM