STM32如何控制三个LED灯

如何控制三个LED灯

寄存器开发方式
要控制PC8,7,6需要通过GPIOC,GPIOC由APB2时钟控制,所以想要使用GPIOC则需要先打开时钟APB2
1、打开时钟APB2
RCC->APB2ENR |=(0X1<<4);//通过寄存器将端口开启
IOPCEN:IO端口C时钟使能
由软件置’1’或清’0’ 
0:IO端口C时钟关闭;
1:IO端口C时钟开启。

2、初始化三个灯
//红灯
//红灯位于高位寄存器的第一位,也就是GPIOC的第八位
GPIOC->CRH &=~(0xf);//将第八位寄存器全部清零
GPIOC->CRH |=(0X1<<1);//将2,3位置零,0,1位分别置0和置1,将模式配置为通用推挽输出,输出模式,最大速度为2MHZ
GPIOC->ODR |=(0X1<<8);//将pin_8配置为1,此时为高电平,灯无法亮,需要亮时将其置1即可

//绿灯
//绿灯位于地位位寄存器的第七位,也就是GPIOC的第七位
GPIOC->CRL &=~(0xf<<28);//将第八位寄存器全部清零
GPIOC->CRL |=(0X1<<29);//将31,30位置零,28,29位分别置0和置1,将模式配置为通用推挽输出,输出模式,最大速度为2MHZ
GPIOC->ODR |=(0X1<<7);//将pin_7配置为1,此时为高电平,灯无法亮,需要亮时将其置1即可

//蓝灯
//蓝灯位于高位寄存器的第六位,也就是GPIOC的第六位
GPIOC->CRL &=~(0xf<<24);//将第八位寄存器全部清零
GPIOC->CRL |=(0X1<<25);//将26,27位置零,24,25位分别置0和置1,将模式配置为通用推挽输出,输出模式,最大速度为2MHZ
GPIOC->ODR |=(0X1<<6);//将pin_6配置为1,此时为高电平,灯无法亮,需要亮时将其置1即可

3、开灯
//开灯操作只需要控制GPIOC的引脚即可
//将ODR的8、7、6全部置0输出低电平灯就亮了
GPIOC->ODR |=(0X1<<8);
GPIOC->ODR |=(0X1<<7);
GPIOC->ODR |=(0X1<<6);

标准外设库开发方式

1、要控制PC8,7,6需要通过GPIOC,GPIOC由APB2时钟控制,所以想要使用GPIOC则需要先打开时钟APB2
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

2、将GPIOC的的三个引脚pin_8,7,6配置推挽输出,输出模式,最大速度为2MHZ
GPIO_InitTypeDef  GPIO_InitStruct;

GPIO_InitStruct.GPIO_Pin=GPIO_Pin_8 |GPIO_Pin_7|GPIO_Pin_6;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_2MHz;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;

GPIO_Init( GPIOC, &GPIO_InitStruct);

//关灯
GPIO_SetBits(GPIOC, GPIO_Pin_8 |GPIO_Pin_7 |GPIO_Pin_6);

3、开灯
可以选择一次全开也可以选择自己想要开启的颜色,改变引脚即可
GPIO_ResetBits(GPIOC, GPIO_Pin_8 |GPIO_Pin_7 |GPIO_Pin_6);
 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于这个问题,您可以使用STM32的GPIO功能来控制8个LED。首先,您需要将8个LED连接到相应的GPIO引脚。然后,您可以使用STM32的固件库来编写代码,以便控制LED的闪烁。以下是一些示例代码: ```c #include "stm32f10x.h" // 定义8个LED的对应GPIO引脚 #define LED1_PIN GPIO_Pin_0 #define LED2_PIN GPIO_Pin_1 #define LED3_PIN GPIO_Pin_2 #define LED4_PIN GPIO_Pin_3 #define LED5_PIN GPIO_Pin_4 #define LED6_PIN GPIO_Pin_5 #define LED7_PIN GPIO_Pin_6 #define LED8_PIN GPIO_Pin_7 // 初始化GPIO引脚 void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; // 使能GPIO时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 配置GPIO引脚为推挽输出 GPIO_InitStructure.GPIO_Pin = LED1_PIN | LED2_PIN | LED3_PIN | LED4_PIN | LED5_PIN | LED6_PIN | LED7_PIN | LED8_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); } // 控制LED的闪烁 void LED_Blink(void) { int i, j; for (i = 0; i < 3; i++) { for (j = 0; j < 8; j++) { // 点亮LED GPIO_SetBits(GPIOA, 1 << j); } // 延时 delay_ms(500); for (j = 0; j < 8; j++) { // 熄灭LED GPIO_ResetBits(GPIOA, 1 << j); } // 延时 delay_ms(500); } } int main(void) { // 初始化LED LED_Init(); while(1) { // 控制LED闪烁 LED_Blink(); } return 0; } // 延时函数 void delay_ms(unsigned int ms) { unsigned int i, j; for (i = 0; i < ms; i++) { for (j = 0; j < 1800; j++); } } ``` 以上代码实现了控制8个LED同时闪烁三次的功能。有关详细信息,请参阅STM32固件库文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值