STM32F103RCT6控制LED
2016-02-24 15:05
996 查看
不管什么单片机,想要控制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
如此编译后下载到MCU就能看到LED一闪一闪的
同样在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
/********************************************************* *平台:MDKARM 5.14 *主控:STM32F103RCT6 **********************************************************/ #include "stm32f10x.h" #include "led.h" //延时函数 void Delay(unsigned int t) { while(t != 0) { t--; } } int main (void) { LED_Init(); while (1) //步骤3 { LED_Not(0); //LED亮灭交替闪烁 for (j=0; j<30; j++) { Delay(60000); } } }led.c
#include "led.h" //LED 端口初始化//步骤2 void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure;//定义一个GPIO_InitTypeDef类型的结构体 RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE); //开启GPIO的外设时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;//选定控制引脚//步骤1 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);//初始化LED灯熄灭 } //点亮1个LED灯 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一闪一闪的
相关文章推荐
- angularJs driective指令小实例
- [A]System.Web.WebPages.Razor.Configuration.HostSection 无法强制转换为 [B]System.Web.WebPages.Razor.Configuration.HostSection。
- spring-security配置和原理简介
- mysql SQL_MODE设置
- rtabmap编译问题总结
- 阮一峰博客十年2
- Linux系统日志
- c# virtual详解
- LeetCode: 9. Palindrome Number
- HighCharts入门
- CSS3 transform3D变形
- win7+iis7.5+asp.net下 CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files 解决方案
- 转载:Linux下简单makefile编写示例
- chmod 递归修改权限
- MYSQL5.5源码安装 linux下
- PhpExcel中文帮助手册|PhpExcel使用方法
- 求字符串中的最小的子字符串长度
- 【算法】如何反转一个单链表?如何两两反转?
- iOS开发 自带二维码扫描(仅支持iOS7及以上系统)
- linux练习题01