用寄存器操作普中PZ6806L的GPIO口,達到控制LED燈的效果,並且改進代碼

操作過程:
1-看電路圖,發現LED1~8分別對應GPIOC的0到7,且低電平有效
2-建立工程,新建GPIO.c
3-先定義相關的宏,如下

#define GPIOC_CRL 	0x40011000
#define RCC_APB2ENR 0x40021018
#define GPIOC_ODR 	0x4001100C

4-在主函數中打開HEI時鐘,並且配置輸出模式爲推輓輸出模式
輸出速率爲50MHz,代碼如下:

int main(void)
int main(void)
{ 
	//打開內部HEI時鐘,頻率爲8MHz
	*((unsigned int *)RCC_APB2ENR) = 0x00000010;
	//設置爲推輓輸輸出模式,速率爲50MHz
	*((unsigned int *)GPIOC_CRL)	 = 0x33333333;
	//使用GPIOC_ODR寄存器來控制LED燈
	*((unsigned int *)GPIOC_ODR) = 0x000000FE;
	
	while(1);
}

5-編譯工程,發現報錯了。報錯爲:

test.axf: Error: L6218E: Undefined symbolSystemInit (referred from startup_stm32f10x_md.o).

問題分析:提示報錯爲SystemInit函數沒有定義
解決辦法:在任意.c文件中定義SystemInit函數,並且定義爲空函數,讓其騙過編譯器
6-再次編譯,發現編譯通過
7-下載驗證,發現LED1亮起,表示本次試驗控制GPIO口成功

改進:
1-發現問題:本次工程中gpio.c並沒有添加任何的聲明文件,將宏全部定義在了gpio.c文件中發現不美觀
2-解決辦法:建立gpio.h文件,並且將聲明文件都放在gpio.h文件中
3-gpio.c文件中包含聲明文件,代碼如下

#include"gpio.h"

4-編譯文件,發現編譯通過,下載驗證也發現沒有問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章