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