打印
[STM32F1]

用stm32f103点灯的一些模式

[复制链接]
239|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
关于stm32点灯
因为使用的芯片就母版可能不是一样的,这里我使用的是stm32f103c8t6来进行讲解

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

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



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

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

使用特权

评论回复
评论
发给她更好fh 2023-10-19 12:13 回复TA
———————————————— 版权声明:本文为CSDN博主「瓶1024」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/yao10241113/article/details/132583334 
沙发
发给她更好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端口位的基本结构

使用特权

评论回复
5
发给她更好fh|  楼主 | 2023-10-19 12:18 | 只看该作者
1.4关于GPIO**在架构中的位置以及相关寄存器**
下面附上一个基本架构图

使用特权

评论回复
6
发给她更好fh|  楼主 | 2023-10-19 12:18 | 只看该作者
2.相关代码以及功能实现
       项目所要用到的一些文件和一些代码

    首先是先建立一个文件夹,存放点灯的代码。    涉及到相关的代码还有main.c,led.c,led.h等代码,和一些固件库函数

使用特权

评论回复
7
发给她更好fh|  楼主 | 2023-10-19 12:22 | 只看该作者
     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 );   //对结构体进行初始化

}

使用特权

评论回复
8
发给她更好fh|  楼主 | 2023-10-19 12:23 | 只看该作者
led.h相关代码

void LED_Init(void);

使用特权

评论回复
9
发给她更好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);
}

}

使用特权

评论回复
10
发给她更好fh|  楼主 | 2023-10-19 12:24 | 只看该作者
通过上面的一些代码就可以用stm32控制灯的亮灭。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

546

帖子

1

粉丝