操作過程:
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-編譯文件,發現編譯通過,下載驗證也發現沒有問題