使用STM32f103C8T6点亮LED小灯
这是第一次写博客,把自己所学分享给大家,欢迎大家评论给出建议,谢谢。
所需设备:STM32f103C8T6最小系统板和Jlink下载器
项目流程
电路连接——电路图
电路图所示当PC13管脚拉低时电路导通LED灯亮,反之则熄灭。
程序编写
LED文件
如图两个文件
led.h头文件描述+代码
#ifndef __LED_H
#define __LED_H
#include "sys.h"
#define LED13 PCout(13)
// PCout(13)函数作用设置PC13端口为输出:PCout(13)=1,PC13端口为输出高电平
void LED_Init(void); //LED灯寄存器初始化函数声明
#endif
led.c文件描述+代码
#include "sys.h"
#include "led.h"
void LED_Init(void)
{
RCC->APB2ENR|=1<<4; //使能PORTC时钟
GPIOC->CRH&=0XFF0FFFFF; //清空寄存器四位控制一个端口
GPIOC->CRH|=0x00100000; //P13 推挽输出
GPIOC->ODR|=1<<13; //P13 输出高
}
main.c程序描述+代码
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
int main(void)
{
/********系统初始化函数*****************/
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
LED_Init(); //初始化与LED连接的硬件接口
/************************************/
while(1)
{
LED13=0; //LED灯亮
delay_ms(6000); //LED灯闪烁
LED13=1; //LED灯灭
}
}
程序效果,如图
寄存器配置说明
led.h头文件——PCout(13)说明
由于这个函数还没有研究明白,暂时不做详细描述
#define PCout(n) BIT_ADDR(GPIOC_ODR_Addr,n) //输出
#define PCin(n) BIT_ADDR(GPIOC_IDR_Addr,n) //输入
led.c寄存器配置说明
APB2 外设时钟使能寄存器(RCC_APB2ENR)
GPIO_C 位于APB2时钟上,4号为置1时钟使能(开启),置0时钟关闭
位操作:APB2ENR|=1<<4 讲1从0号位移动到4号位,再进行或运算(有1则1,其余不变)
清空 端口配置高寄存器 端口配置高寄存器(GPIOx_CRH)
GPIOC_13位于13位属于高位,23/22/21/20四个位控制GPIOc_13,
位操作CRH&=0XFF0FFFFF;清空 端口配置高寄存器,与运算(有0则0)
位操作CRH|=0x00100000;P13 推挽输出,最大速率10MHZ
端口输出数据寄存器 端口输出数据寄存器(GPIOx_ODR)
GPIOx->ODR 端口数据输出寄存器可写可读,可以设置IO口输出的值
GPIOC->ODR|=1<<13;//设置GPIOc_13 端口输出1(高电平)LED熄灭
执行完初始化函数后—LED不亮,执行GPIOC->ODR|=0<<13;或者LED13=0;才亮;
文章结束,初次写文章,比较混乱,目的是知识分享,谢谢大家欢迎讨论