用stm32f103点灯的一些模式

关于stm32点灯

因为使用的芯片就母版可能不是一样的,这里我使用的是stm32f103c8t6来进行讲解

首先要点亮一个灯,就需要知道灯是一个外设,就涉及到gpio的一些知识点

第一步就是要对板子原理图上的硬件连接进行一定的了解,下面这是我使用的板子的硬件连接图

我如果想要实现这个灯的一个亮灭编程,其实就是对PA1这个io口的一个高低电平的切换,通过上面这个图可以知道,如果我们使用

低电平灯就会亮,如果使用高电平灯就会灭。所以现在可以明显的知道要涉及到的一些知识点。

1.GPIO的一些知识点

1.1GPIO的知识点的应用

GPIO的全称:** General Purpose Input/Output 通用输入输出口

1.2关于GPIO的一些细节描述

共有ABCDEFG,7组GPIO端口

每个端口GPIOx有16个IO口:pin 0-15

例如:GPIOA pin0-15 GPIOB pin0-15

每个IO口可配置为8种状态:

输入浮空GPIO_Mode_IN_FLOATING:浮空输入状态,IO口状态完全由外部输入决定。如果悬空时,读到的IO口状态是不确定的,一般用于标准的通讯协议如 I2C、USART 的接收端。(而如果做按键的话是不行的,但是我们的板子上外部接有上拉电阻)。

输入上拉GPIO_Mode_IPU:内部接一个上拉电阻,使得外部没有输入时有个确定的高电平,同时也能够增强驱动能力。按键则常是配置成这样的模式

输入下拉GPIO_Mode_IPD:内部有个下拉电阻,使得外部没有输入时有个确定的低电平。

模拟输入GPIO_Mode_AIN:关闭了施密特触发器,不为转变数字量,不接上拉下拉。常用于ADC采集模拟信号

通用开漏输出GPIO_Mode_Out_OD:IO输出0,N-MOS管导通,接地,低电平;IO输出1,悬空;它具*“线与”*特性,即很多个开漏模式 引脚连接到一起时,只有当所有引脚都输出高阻态,才能由上拉电阻提供高电平,此高电平的电压为外部上拉电阻所接的电源的电压。若其中一个引脚为低电平,那线路就相当于接地,使得整条线路都为低电平。

通用推挽输出GPIO_Mode_Out_PP:IO输出0,N-MOS管导通,接地,低电平;IO输出1,P-MOS管导通,接VCC,高电平;所以拥有较强的驱动能力

复用开漏输出GPIO_Mode_AF_OD:用作复用功能时的配置,使用权让给片上外设芯片,例如IIC的数据线和时钟线,使用的是其*线与*的特性。

复用推挽输出GPIO_Mode_AF_PP:用作复用功能时的配置,例如USART,SPI

1.3stm32的一个I/O端口位的基本结构

1.4关于GPIO**在架构中的位置以及相关寄存器**

下面附上一个基本架构图

2.相关代码以及功能实现

       项目所要用到的一些文件和一些代码

    首先是先建立一个文件夹,存放点灯的代码。    

     涉及到相关的代码还有main.c,led.c,led.h等代码,和一些固件库函数

     led.c的相关代码

#include "led.h"
#include "stm32f10x.h"
#include "stdint.h"



//LED的初始化

void LED_Init()
{

	GPIO_InitTypeDef    led_initstruct;   //定义gpio的结构体
 
	//初始化时钟
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	led_initstruct.GPIO_Pin=GPIO_Pin_1 ;    //初始化引脚口(需要对应自己板子上的)
	led_initstruct.GPIO_Speed=GPIO_Speed_2MHz;//选择频率
	led_initstruct.GPIO_Mode=GPIO_Mode_Out_PP;//选择推挽输出模式
	
  GPIO_Init(GPIOA,&led_initstruct );   //对结构体进行初始化

}

   led.h相关代码

void LED_Init(void);

main.c

 //一个软件延时函数 大约是1ms
void delay(uint16_t time)
{
  uint16_t i=0;
	while(time--)
	{
	 i=12000;
   while(i--);
	}

}

int  main()
{

	
	LED_Init();	//led的初始化

   while(1)
	 {

   GPIO_ResetBits(GPIOA, GPIO_Pin_1);  //灯亮
//		 delay(1000);
   GPIO_SetBits(GPIOA, GPIO_Pin_1);     //灯暗
//		 delay(1000);
}

}

  

通过上面的一些代码就可以用stm32控制灯的亮灭。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值