STM32点亮LED的三种方法

这篇具有很好参考价值的文章主要介绍了STM32点亮LED的三种方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

学习STM32的第一课,都是点亮LED。

芯片:STM32F107RC

系统时钟:72MHz

LED引脚:板载引脚PD2,正极接3.3V,负极接PD2,低电平点亮

第一种方法:使用库函数操作

LED引脚配置:

void LED_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;//GPIO配置结构体
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);//使能PD2的时钟,GPIOD

	//PD2引脚配置
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2;//PD2引脚
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;//50MHz
	GPIO_Init(GPIOD, &GPIO_InitStruct);//GPIO配置
  
}

主函数:

int main(void)
{
  delay_init();//延时函数初始化
  LED_Init();//led的引脚初始化
  
  while(1)
  {
    GPIO_ResetBits(GPIOD, GPIO_Pin_2);//PD2输出低电平,点亮
    delay_ms(200); //延时200ms
    GPIO_SetBits(GPIOD, GPIO_Pin_2);//PD2输出高电平,熄灭
    delay_ms(200); //延时200ms
  }
}

第二种方法:使用寄存器操作

LED引脚配置:

void LED_Init(void)
{
	RCC->APB2ENR |= 1<<5;  //使能GPIOD
	GPIOD->CRL &= 0xFFFFF0FF; //把2#引脚对应位清零
	GPIOD->CRL |= 0x00000300; //配置2#引脚为推挽输出模式,速度50MHz
}

解释:

1.第1句:RCC->APB2ENR寄存器的位[5]设为1,表示GPIOD时钟使能。类似的还有位[2]表示GPIOA,位[3]表示GPIOB,位[4]表示GPIOC,设为1表示使能,设为0表示失能。

1<<5就是二进制 0010 0000,位[5]为1,(|=)操作就是把位[5]设为1,其他位不变。

2.第2句:GPIOD->CRL寄存器的位[11:8]这4个位表示2#引脚,联系上面操作的是GPIOD,这里操作2#引脚,也就是操作GPIOD.2。类似的还有CRL寄存器的[3:0]这4位操作0#引脚,[7:4]这4位操作1#引脚。

0xFFFFF0FF就是位[11:8]这4位是0,其他位都是1,(&=)操作就是把[11:8]这4位清零,其他位不变。

3.同理,第3句的意思是把[11:8]这4位设为0011,其中11表示GPIO配置成输出模式,速度50MHz;00表示推挽模式,连在一起就是把PD2配置成推挽输出模式。

主函数:

int main(void)
{
	delay_init();//延时函数初始化
	LED_Init();//LED引脚初始化

	while(1)
	{
		GPIOD->ODR |= 1<<2;   //设置PD2输出高电平1,熄灭
		delay_ms(200); //延时200ms
		GPIOD->ODR &= ~(1<<2); //设置PD2输出低电平0,点亮 
		delay_ms(200); //延时200ms
	}
}

解释:

1.GPIOD->ODR寄存器的位[2]表示引脚输出高电平还是低电平,(1<<2)表示二进制0100,也就是位[2]为1,这句表示把ODR寄存器的位[2]设为高电平,其他位不变,LED熄灭。

2.(1<<2)表示二进制0100,那么~(1<<2)就表示二进制1011,也就是位[2]清零,其他位不变,这句表示把ODR寄存器的位[2]设为低电平,LED点亮了。

第三种方法:电平翻转

其实这也不算一种方法,只是一个翻转引脚电平,让LED闪烁的小技巧。

LED引脚配置函数,用第一种或第二种方法都可以

主函数:

int main(void)
{
	delay_init();
	LED_Init();
	while(1)
	{
		GPIOD->ODR ^= GPIO_Pin_2;//翻转PD2电平
		delay_ms(200); //延时200ms
	}
}

解释:

GPIO_Pin_2是定义在stm32f10x_gpio.h里面的宏定义,

#define GPIO_Pin_2    ((uint16_t)0x0004)

16进制数4对应的二进制是0100,也就是位[2]为1,(^=)操作会不断翻转这一位,把这一位反复设为0或1,也就实现了LED的亮和灭。

总结:

以上的方法,其实推荐的还是第一种,用标准库函数来配置和操作,这样代码的可读性好。

第二种方法看起来代码量很少,但是可读性不佳,可以参照理解如何操作寄存器。

有关寄存器的详细配置,就要多看看stm32参考手册了。

另外关于位操作,可以参考这篇文章:

简单理解16进制

简单理解位运算:位与&、位或|、位非~、异或^、左移<<、右移>>文章来源地址https://www.toymoban.com/news/detail-620113.html

到了这里,关于STM32点亮LED的三种方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2、STM32点亮LED灯

    1、新建工程,新建一个目录存放以后所有的工程stmproject,在这个目录下新建文件夹寄存器点灯,文件名为LED。 接下来选择所用的软件包,之前安装软件时安装的,选择对应型号即可。 如果需要安装别的安装包可以在这个网址下载。点击打开文件 点击next,再点击finish就安装

    2024年02月01日
    浏览(42)
  • STM32固件库编程-----点亮led小灯

    第一步:打开keil5,创建工程文件 第二步:选择自己想要的路径(温馨提示,最好不要创建在C盘里面)然后点击保存 第三步:因为我们是使用STM32单片机所以选择Software Packs 因为我们使用的是stm32F1系列的芯片所以要选择如下 STM32F1系列有多种芯片,所以我们可以根据自己手上

    2024年02月06日
    浏览(40)
  • 最详细STM32,cubeMX 点亮 led

    这篇文章将详细介绍 如何在 stm32103 板子上点亮一个LED. 实验开发板:STM32F103C8T6。 所需软件:keil5 , cubeMX 。 实验目的:了解 led 点亮原理,cubeMX配置 , GPIO 等相关函数 。 代码编写软件 : MDK keil5 。 图形化配置软件 :STM32cubeMX。 仿真器驱动 : STLINK 。 串口驱动 :CH340 。

    2024年01月16日
    浏览(43)
  • STM32寄存器点亮LED灯

     这个灯是 PB5引脚 看原理图可以看出 让GPIOB5输出低电平 就能点亮 那么我们得让 打开控制GPIOB5的时钟 让GPIOB5 输出模式 让GPIOB5低电平 时钟就相当于一个阀门开关,或者理解成水龙头,你打开了 才有水出来,也就是你打开才能工作。 看中文参考手册 系统架构 找到你的GPIO

    2024年02月07日
    浏览(49)
  • STM32——震动传感器点亮LED灯

    若产品不震动,模块上的 DO 口输出高电平; 若产品震动,模块上的 DO 口输出低电平,D0-LED绿色指示灯亮。 需求:当震动传感器接收到震动信号时,使用中断的方式点亮led1。 1、打开cubeMX a.在SYS中选择调试方式为串行线调试。 b.在RCC(复位和时钟控制)中选择 HSE(高速时钟)

    2024年02月04日
    浏览(41)
  • 野火stm32指南者开发板点亮LED

    目录 1.芯片手册中的LED电路图 2.官网手册 3.代码演示 3.1 stm32f10x.h 头文件 3.2 点亮绿灯 3.3 点亮蓝灯 3.4 点亮红灯 3.5 LED灯闪烁,绿灯闪烁 。 3.6 红绿蓝三色LED灯切换闪烁 3.1 stm32f10x.h 头文件 3.2 点亮绿灯 3.3 点亮蓝灯 3.4 点亮红灯 3.5 LED灯闪烁,绿灯闪烁 。 3.6 红绿蓝三色LED灯切

    2024年02月13日
    浏览(42)
  • 【STM32】STM32CubeMX教程一--基本使用(新建工程点亮LED灯)

    前言 在配置好CubeMX之后,就是新建工程的开始了,那么首先我们需要一些准备,本片博客我们会很详细的介绍STM32CubeMX的基本使用和如何创建一个新的工程并且点亮LED灯 在新建工程时,我们分为了具体流程1~7,如果您不想看每部分的讲解,直接按照流程操作即可,5分钟即可

    2024年02月09日
    浏览(50)
  • arm学习stm32串口指令点亮led灯

    main.c uart-led.h uart-led.c

    2024年02月12日
    浏览(40)
  • (4)STM32的SPI协议及LED点亮

    2024年02月11日
    浏览(39)
  • GPIO(STM32)点亮LED灯、按键KEY

    GPIO(general porpose intputoutput):通用输入输出端口的简称。可以通过软件控制其输出和输入。stm32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通信,控制以及数据采集的功能。 在STM32F4xx芯片上的GPIO口被分成各个组,一共有7组IO口,以A、B、C、D、E、F、G等命名(不同

    2024年04月14日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包