[STM32F1] 用stm32f103点灯的一些模式

[复制链接]
466|10
 楼主| 发给她更好fh 发表于 2023-10-19 12:13 | 显示全部楼层 |阅读模式
关于stm32点灯
因为使用的芯片就母版可能不是一样的,这里我使用的是stm32f103c8t6来进行讲解

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

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

984826530accd331ca.png

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

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

评论

———————————————— 版权声明:本文为CSDN博主「瓶1024」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/yao10241113/article/details/132583334  发表于 2023-10-19 12:13
 楼主| 发给她更好fh 发表于 2023-10-19 12:16 | 显示全部楼层
1.GPIO的一些知识点
1.1GPIO的知识点的应用
GPIO的全称:** General Purpose Input/Output 通用输入输出口
 楼主| 发给她更好fh 发表于 2023-10-19 12:16 | 显示全部楼层
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
 楼主| 发给她更好fh 发表于 2023-10-19 12:17 | 显示全部楼层
1.3stm32的一个I/O端口位的基本结构 892806530add4400d2.png
 楼主| 发给她更好fh 发表于 2023-10-19 12:18 | 显示全部楼层
1.4关于GPIO**在架构中的位置以及相关寄存器**
下面附上一个基本架构图 268946530adf647e0b.png
 楼主| 发给她更好fh 发表于 2023-10-19 12:18 | 显示全部楼层
2.相关代码以及功能实现
       项目所要用到的一些文件和一些代码

    首先是先建立一个文件夹,存放点灯的代码。    225956530ae0fdc879.png 涉及到相关的代码还有main.c,led.c,led.h等代码,和一些固件库函数
 楼主| 发给她更好fh 发表于 2023-10-19 12:22 | 显示全部楼层
     led.c的相关代码

  1. #include "led.h"
  2. #include "stm32f10x.h"
  3. #include "stdint.h"



  4. //LED的初始化

  5. void LED_Init()
  6. {

  7.         GPIO_InitTypeDef    led_initstruct;   //定义gpio的结构体

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

  16. }
 楼主| 发给她更好fh 发表于 2023-10-19 12:23 | 显示全部楼层
led.h相关代码

void LED_Init(void);
 楼主| 发给她更好fh 发表于 2023-10-19 12:23 | 显示全部楼层
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);
}

}
 楼主| 发给她更好fh 发表于 2023-10-19 12:24 | 显示全部楼层
通过上面的一些代码就可以用stm32控制灯的亮灭。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

43

主题

563

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部