要求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--);
- }
复制代码
|