嵌入式基于寄存器固件库点亮一个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)
{
}
}