STM32寄存器实现led亮灭

北城余情 提交于 2020-03-12 04:53:46

嵌入式基于寄存器点亮一个LED和8个LED

  • 基于寄存器实现1个LED亮灭

目标:

使用STM32F103R6芯片,PB8引脚接LED的阴极,通过C语言程序控制,从PB8引脚输出低电平,使LED点亮。

用Proteus设计第一个SYM32的LED控制电路

  • 新建Proteus工程
  • 添加元器件
  • 放置元器件
  • 调整元器件位置
  • 放置终端
  • 连线
  • 属性设置

电路图

用到的C语言操作

代码实现

#include "stm32f10x.h"
int main()
{
    RCC->APB2ENR |=1<<3;
    GPIOB->CRH &=0xfffffff0;
    GPIOB->CRH |=0x00000003;

    while(1)
    {
        GPIOB->BRR |=0X0080;
}
    }
  • 基于固件库实现1个LED亮灭

  • STM32固件库

imgimgimg

目标、电路图和实现寄存器的相同,下面是实现的代码

实现代码

#include "stm32f10x.h"
int main()
{


    GPIO_InitTypeDef strs;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
    strs.GPIO_Pin =GPIO_Pin_8;
    strs.GPIO_Speed =GPIO_Speed_50MHz;
    strs.GPIO_Mode =GPIO_Mode_Out_PP;

    GPIO_Init(GPIOB,&strs);

    while(1)
    {
        GPIO_ResetBits(GPIOB,GPIO_Pin_8);
    }
}
  • 8个LED全亮、全灭、间隔点亮

电路图

img

代码实现

#include "stm32f10x.h"

void SystemInit()
{}

void delay(unsigned int i)
{
    while(i--);
}

int main()
{
    unsigned char i = 0;

    RCC_APB2ENR |= (1 << 3);
    GPIOB_CRL |= 0x33333333;

    GPIOB_BRR = 0xff;
    delay(300000);

    GPIOB_BSRR = 0xff;
    delay(300000);

    for(i = 0; i < 8; i+=2)
{
    GPIOB_BRR = (0x01) << i;
    delay(300000);
    GPIOB_BSRR = 0xff;
}
    while(1)
    {


        }

    }

第一次在博客上记录学习与生活,写的太烂了(为什么自己会这么想,是因为我太菜),还请大佬请放过我

日常苦逼状态

3.jpg

本文由博客一文多发平台 OpenWrite 发布!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!