STM32F103RCT6控制LED转载于http://blog.csdn.net/snyanglq/article/details/50730895
不管什么单片机,想要控制LED灯,只能是通过控制单片机芯片的I/O引脚电平的高低来实现。
同样在ST单片机也一样,在ST单片机上,I/O引脚可以被软件设置成各种不同的功能,如输入或输出,所以被称为 GPIO (General-purpose I/O)。
而GPIO引脚又被分为GPIOA、GPIOB„„GPIOG不同的组,每组端口分为 0~15,共16个不同的引脚不等,
对于不同型号的芯片,端口的组和引脚的数量不尽相同,具体请参考相应ST单片机芯片型号的datasheet。
根据ST单片机的GPIO特点,控制LED灯的步骤如下:
1.在众多 GPIO端口引脚中选定需要控制的特定引脚[与LED相连的控制引脚]
2.根据外设配置GPIO需要的特定功能
3.通过设置 GPIO输出电压的高低控制LED的亮和灭
电路图
从电路图可以看出低电平LED亮,高电平LED灭
所以我们设置的程序如下:
下面为库函数编程,需要加载如下库文件
main.c
-
-
-
-
- #include "stm32f10x.h"
- #include "led.h"
-
-
- void Delay(unsigned int t)
- {
- while(t != 0)
- {
- t--;
- }
- }
-
- int main (void)
- {
- LED_Init();
-
- while (1)
- {
- LED_Not(0);
- for (j=0; j<30; j++)
- {
- Delay(60000);
- }
- }
- }
led.c
- #include "led.h"
-
- void LED_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOC, &GPIO_InitStructure);
- GPIO_SetBits(GPIOC, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3);
- }
-
- void LED_On(int n)
- {
- switch(n)
- {
- case 0: GPIO_ResetBits(GPIOC,GPIO_Pin_0);
- break;
- case 1: GPIO_ResetBits(GPIOC,GPIO_Pin_1);
- break;
- case 2: GPIO_ResetBits(GPIOC,GPIO_Pin_2);
- break;
- case 3: GPIO_ResetBits(GPIOC,GPIO_Pin_3);
- break;
- default: break;
- }
- }
-
- void LED_Off(int n)
- {
- switch(n)
- {
- case 0: GPIO_SetBits(GPIOC,GPIO_Pin_0);
- break;
- case 1: GPIO_SetBits(GPIOC,GPIO_Pin_1);
- break;
- case 2: GPIO_SetBits(GPIOC,GPIO_Pin_2);
- break;
- case 3: GPIO_SetBits(GPIOC,GPIO_Pin_3);
- break;
- default: break;
- }
- }
-
-
- void LED_Not(int n)
- {
- switch(n)
- {
- case 0: GPIO_WriteBit(GPIOC, GPIO_Pin_0,(BitAction)(1-(GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_0))));
- break;
- case 1: GPIO_WriteBit(GPIOC, GPIO_Pin_1,(BitAction)(1-(GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_1))));
- break;
- case 2: GPIO_WriteBit(GPIOC, GPIO_Pin_2,(BitAction)(1-(GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_2))));
- break;
- case 3: GPIO_WriteBit(GPIOC, GPIO_Pin_3,(BitAction)(1-(GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_3))));
- break;
- default: break;
- }
- }
如此编译后下载到MCU就能看到LED一闪一闪的