一、原理图
说明:STM32F100R8
接口:PB3和PB4
原理:LED低电平 亮
代码少,我直接放在main.c编程
main.c
#include "main.h"
void delay_ms(u16 nms)
{
volatile u16 i;
do
{
for(i=0;i<1500;i++);
}while(nms--);
}
void delay_us(u32 nus)
{
volatile u16 i;
do
{
for(i=0;i<20;i++);
}while(nus--);
}
int main(void)
{
//PB3和PB4引脚有JTAG功能,需要设置为普通的IO口使用
RCC->APB2ENR |= RCC_APB2Periph_AFIO; //开启辅助时钟
AFIO->MAPR |= (0x02<<24); // 清除MAPR的[26:24]
mainLedInit();
while (1)
{
GPIO_ResetBits(GPIOB, GPIO_Pin_3);
GPIO_ResetBits(GPIOB, GPIO_Pin_4);
delay_ms(1000);
GPIO_ResetBits(GPIOB, GPIO_Pin_3);
GPIO_SetBits(GPIOB, GPIO_Pin_4);
delay_ms(1000);
//也可以用寄存器点亮LED
/*while (1) // 寄存器方式点亮LED灯
{
i ++
if(i < 30000)
{
GPIOB->BRR = (1 << 3 ); // 设置PB3为低电平
GPIOB->BSRR = (1 << 4); // 设置PB4为高电平
}else if(i < 600000)
{
GPIOB->BRR = (1 << 3);
GPIOB->BSRR = (1 << 4);
}else
{
i = 0;
}
}
}
*/
}
}
//初始化LED接口
void mainLedInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure; // 定义结构体类型
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // GPIOB时钟使能
// 2.定义GPIO配置结构体的变量
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_3; // 前面空四格
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
// GPIO_ResetBits(GPIOB, GPIO_Pin_3 | GPIO_Pin_4);
// 3.调用函数初始化GPIO
GPIO_Init(GPIOB,&GPIO_InitStructure); // 这里要传入地址
}
main.h
#ifndef __MAIN_H
#define __MAIN_H
void mainLedInit(void);
#endif