要求led燈管腳在PA.1管腳上,實現一閃一滅。
下面的程序是別人寫的,我自己都感覺比較復雜,不過新手看的話應該會比較易懂。
需要注意的地方:
1、開時鐘和初始化GPIO的順序一定不能弄錯
2、操作時鐘必須開時鐘和AFIO寄存器才能接著操作GPIO口。
3、STM32和51的程序是可以互相移植的。
- #include "stm32f10x_lib.h"//頭文件
- void LED_Init(void)
- {
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //開 GPIOA 時鐘
- GPIO_InitTypeDef GPIO_InitStructure;//聲明一個結構體,名字是GPIO_InitStructure,結構體原型由GPIO_InitTypeDef 確定,stm32里面初始化GPIO用的吧。。設置完了GPIO_InitStructure里面的內容后在GPIO_Init (GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_InitStruct)里面調用,比如初始化pa口,就是GPIO_Init (GPIOA, &GPIO_InitStructure),括號里后面那個就是你問題里面聲明的那個結構體
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;//設置led燈連在第二個管腳
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //GPIO的工作狀態為推挽輸出
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // GPIO的速率最高輸出速率 50Hz
- GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化 GPIOA
- }
- void Delay(vu32 nCount) //延時函數,不解釋
- {
- for(; nCount != 0; nCount--);
- }
- main()
- {
- LED_Init();
- while(1)
- {
- GPIO_SetBits(GPIOA, GPIO_Pin_1);//將 GPIO的A端口第二個管腳置為高電平,即PA.1=1;
- Delay(0x8ffff);
- GPIO_ResetBits(GPIOA, GPIO_Pin_1);//將 GPIO的 A端口第二個管腳置為低電平,即PA.1=0;
- Delay(0x8ffff);
- }
- }
- #include "stm32f10x.h"
- //定義了PA 0-7
- #define LED1_OFF GPIO_ResetBits(GPIOA,GPIO_Pin_0);
- #define LED1_ON GPIO_SetBits(GPIOA,GPIO_Pin_0);
- #define LED2_OFF GPIO_ResetBits(GPIOA,GPIO_Pin_1);
- #define LED2_ON GPIO_SetBits(GPIOA,GPIO_Pin_1);
- #define LED3_OFF GPIO_ResetBits(GPIOA,GPIO_Pin_2);
- #define LED3_ON GPIO_SetBits(GPIOA,GPIO_Pin_2);
- #define LED4_OFF GPIO_ResetBits(GPIOA,GPIO_Pin_3);
- #define LED4_ON GPIO_SetBits(GPIOA,GPIO_Pin_3);
- #define LED5_OFF GPIO_ResetBits(GPIOA,GPIO_Pin_4);
- #define LED5_ON GPIO_SetBits(GPIOA,GPIO_Pin_4);
- #define LED6_OFF GPIO_ResetBits(GPIOA,GPIO_Pin_5);
- #define LED6_ON GPIO_SetBits(GPIOA,GPIO_Pin_5);
- #define LED7_OFF GPIO_ResetBits(GPIOA,GPIO_Pin_6);
- #define LED7_ON GPIO_SetBits(GPIOA,GPIO_Pin_6);
- #define LED8_OFF GPIO_ResetBits(GPIOA,GPIO_Pin_7);
- #define LED8_ON GPIO_SetBits(GPIOA,GPIO_Pin_7);
- void Delay(__IO uint32_t nCount);
- void GPIO_init(void);
- void rcc_init(void);
- int main(void)
- {
- rcc_init();
- GPIO_init();
- while(1)
- {
- LED1_ON;LED2_OFF;LED3_OFF;LED4_OFF;LED5_OFF;LED6_OFF;LED7_OFF;LED8_OFF;//led1亮
- Delay(30000);
- LED1_OFF;LED2_ON;LED3_OFF;LED4_OFF;LED5_OFF;LED6_OFF;LED7_OFF;LED8_OFF;//led2亮
- Delay(30000);
- LED1_OFF;LED2_OFF;LED3_ON;LED4_OFF;LED5_OFF;LED6_OFF;LED7_OFF;LED8_OFF;//led3亮
- Delay(30000);
- LED1_OFF;LED2_OFF;LED3_OFF;LED4_ON;LED5_OFF;LED6_OFF;LED7_OFF;LED8_OFF;//led4亮
- Delay(30000);
- LED1_OFF;LED2_OFF;LED3_OFF;LED4_OFF;LED5_ON;LED6_OFF;LED7_OFF;LED8_OFF;//led5亮
- Delay(30000);
- LED1_OFF;LED2_OFF;LED3_OFF;LED4_OFF;LED5_OFF;LED6_ON;LED7_OFF;LED8_OFF;//led6亮
- Delay(30000);
- LED1_OFF;LED2_OFF;LED3_OFF;LED4_OFF;LED5_OFF;LED6_OFF;LED7_ON;LED8_OFF;//led7亮
- Delay(30000);
- LED1_OFF;LED2_OFF;LED3_OFF;LED4_OFF;LED5_OFF;LED6_OFF;LED7_OFF;LED8_ON;//led8亮
- Delay(30000);
- LED1_OFF;LED2_OFF;LED3_OFF;LED4_OFF;LED5_OFF;LED6_OFF;LED7_ON;LED8_OFF;//led7亮
- Delay(30000);
- LED1_OFF;LED2_OFF;LED3_OFF;LED4_OFF;LED5_OFF;LED6_ON;LED7_OFF;LED8_OFF;//led6亮
- Delay(30000);
- LED1_OFF;LED2_OFF;LED3_OFF;LED4_OFF;LED5_ON;LED6_OFF;LED7_OFF;LED8_OFF;//led5亮
- Delay(30000);
- LED1_OFF;LED2_OFF;LED3_OFF;LED4_ON;LED5_OFF;LED6_OFF;LED7_OFF;LED8_OFF;//led4亮
- Delay(30000);
- LED1_OFF;LED2_OFF;LED3_ON;LED4_OFF;LED5_OFF;LED6_OFF;LED7_OFF;LED8_OFF;//led3亮
- Delay(30000);
- LED1_OFF;LED2_ON;LED3_OFF;LED4_OFF;LED5_OFF;LED6_OFF;LED7_OFF;LED8_OFF;//led2亮
- Delay(30000);
- LED1_OFF;LED2_OFF;LED3_OFF;LED4_OFF;LED5_OFF;LED6_OFF;LED7_OFF;LED8_OFF;//led1亮
- }
- }
- //進行GPIO初始化
- void GPIO_init(void)
- {
- GPIO_InitTypeDef myGPIOA;//初始化
- GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
- myGPIOA.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO _Pin_5|GPIO_Pin_6|GPIO_Pin_7;
- myGPIOA.GPIO_Mode=GPIO_Mode_Out_PP;
- myGPIOA.GPIO_Speed=GPIO_Speed_50MHz;
- GPIO_Init(GPIOA,&myGPIOA);
- }
- //開時鐘和AFIO寄存器
- void rcc_init(void)
- {
- SystemInit();
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);//開時鐘
- }
- //延時函數
- void Delay(u32 nCount)
- {
- u32 x,y;
- for(x=nCount; nCount != 0; nCount--)
- for(y=110;y>0;y--);
- }
復制代碼
|