位操作
-
指定的某一位数置1
x|=(1<<y)
-
指定的某一位数置0
x&=~(1<<y)
硬件设计
led.c
#include "led.h"
//初始化 PB5 和 PE5 为输出口.并使能这两个口的时钟
//LED IO 初始化
void LED_Init(void)
{
RCC->APB2ENR|=1<<3; //使能 PORTB 时钟
RCC->APB2ENR|=1<<6; //使能 PORTE 时钟
GPIOB->CRL&=0XFF0FFFFF; //清零 不影响其它位的设置
GPIOB->CRL|=0X00300000;//PB.5 推挽输出
GPIOB->ODR|=1<<5; //PB.5 输出高
GPIOE->CRL&=0XFF0FFFFF;
GPIOE->CRL|=0X00300000;//PE.5 推挽输出
GPIOE->ODR|=1<<5; //PE.5 输出高
}
LED_Init(void),该函数的功能就是用来实现配置 PB5和 PE5 为推挽输出。
使能时钟
在配置 STM32 外设的时候,任何时候都要先使能该外设的时钟!APB2ENR 是 APB2 总线上的外设时钟使能寄存器。
我们要使能的 PORTB 和 PORTE 的时钟使能位,分别在 bit3 和 bit6,只要将这两位置 1 就可以使能 PORTB 和 PORTE 的时钟了。
设置输出模式(CRL)
PB5 和 PE5 的模式为推挽输出,输出速度50M。 0011=3
设置输出(ODR)
默认输出 1
main
#include "delay.h"
#include "led.h"
int main(void)
{
Stm32_Clock_Init(9);//系统时钟设置
delay_init(72); //延时初始化
LED_Init();
while(1)
{
GPIOB->ODR|=1<<5;
GPIOE->ODR|=1<<5;
delay_ms(500);
GPIOB->ODR&=~(1<<5);
GPIOE->ODR&=~(1<<5);
delay_ms(500);
}
}