STM32F103RCT6控制LED

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

[cpp]  view plain  copy
  1. /********************************************************* 
  2. *平台:MDKARM 5.14 
  3. *主控:STM32F103RCT6 
  4. **********************************************************/  
  5. #include "stm32f10x.h"  
  6. #include "led.h"  
  7.   
  8. //延时函数  
  9. void Delay(unsigned int t)  
  10. {  
  11.     while(t != 0)  
  12.     {  
  13.         t--;  
  14.     }  
  15. }  
  16.   
  17. int main (void)  
  18. {  
  19.     LED_Init();  
  20.       
  21.     while (1)       //步骤3  
  22.     {  
  23.         LED_Not(0);             //LED亮灭交替闪烁  
  24.         for (j=0; j<30; j++)  
  25.         {  
  26.             Delay(60000);  
  27.         }  
  28.     }  
  29. }  
led.c

[cpp]  view plain  copy
  1. #include "led.h"  
  2. //LED 端口初始化//步骤2  
  3. void LED_Init(void)  
  4. {  
  5.     GPIO_InitTypeDef GPIO_InitStructure;//定义一个GPIO_InitTypeDef类型的结构体  
  6.     RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE); //开启GPIO的外设时钟  
  7.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;//选定控制引脚//步骤1     
  8.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置引脚为通用推挽输出    
  9.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置控制引脚的速度  
  10.     GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化结构体  
  11.     GPIO_SetBits(GPIOC, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3);//初始化LED灯熄灭  
  12. }  
  13. //点亮1个LED灯  
  14. void LED_On(int n)  
  15. {  
  16.     switch(n)  
  17.     {  
  18.      case 0:    GPIO_ResetBits(GPIOC,GPIO_Pin_0);       //控制引脚输出低电平  
  19.                         break;  
  20.      case 1:    GPIO_ResetBits(GPIOC,GPIO_Pin_1);  
  21.                         break;  
  22.      case 2:    GPIO_ResetBits(GPIOC,GPIO_Pin_2);  
  23.                         break;  
  24.      case 3:  GPIO_ResetBits(GPIOC,GPIO_Pin_3);  
  25.                         break;  
  26.      defaultbreak;  
  27.     }  
  28. }  
  29. //  
  30. void LED_Off(int n)  
  31. {  
  32.     switch(n)  
  33.     {  
  34.      case 0:    GPIO_SetBits(GPIOC,GPIO_Pin_0);         //控制引脚输出高电平  
  35.                         break;  
  36.      case 1:    GPIO_SetBits(GPIOC,GPIO_Pin_1);  
  37.                         break;  
  38.      case 2:    GPIO_SetBits(GPIOC,GPIO_Pin_2);  
  39.                         break;  
  40.      case 3:  GPIO_SetBits(GPIOC,GPIO_Pin_3);  
  41.                         break;  
  42.      defaultbreak;  
  43.     }     
  44. }  
  45.   
  46.   
  47. void LED_Not(int n)  
  48. {  
  49.     switch(n)  
  50.     {  
  51.      case 0:    GPIO_WriteBit(GPIOC, GPIO_Pin_0,(BitAction)(1-(GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_0))));  
  52.                         break;  
  53.      case 1:    GPIO_WriteBit(GPIOC, GPIO_Pin_1,(BitAction)(1-(GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_1))));  
  54.                         break;  
  55.      case 2:    GPIO_WriteBit(GPIOC, GPIO_Pin_2,(BitAction)(1-(GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_2))));  
  56.                         break;  
  57.      case 3:  GPIO_WriteBit(GPIOC, GPIO_Pin_3,(BitAction)(1-(GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_3))));  
  58.                         break;  
  59.      defaultbreak;  
  60.     }         
  61. }  

如此编译后下载到MCU就能看到LED一闪一闪的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值