嵌入式基于寄存器点亮一个LED和8个LED
- 基于寄存器实现1个LED亮灭
目标:
使用STM32F103R6芯片,PB8引脚接LED的阴极,通过C语言程序控制,从PB8引脚输出低电平,使LED点亮。
用Proteus设计第一个SYM32的LED控制电路
- 新建Proteus工程
- 添加元器件
- 放置元器件
- 调整元器件位置
- 放置终端
- 连线
- 属性设置
电路图
 
用到的C语言操作
- C语言位操作,就是对基本类型变量可以在位级别进行操作。 - C语言还支持如下表所示的6种位操作
 -  
代码实现
#include "stm32f10x.h"
int main()
{
    RCC->APB2ENR |=1<<3;
    GPIOB->CRH &=0xfffffff0;
    GPIOB->CRH |=0x00000003;
    while(1)
    {
        GPIOB->BRR |=0X0080;
}
    }- 基于固件库实现1个LED亮灭
- STM32固件库



目标、电路图和实现寄存器的相同,下面是实现的代码
实现代码
#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全亮、全灭、间隔点亮
电路图

代码实现
#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)
    {
        }
    }
第一次在博客上记录学习与生活,写的太烂了(为什么自己会这么想,是因为我太菜),还请大佬请放过我
日常苦逼状态

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