精华内容
下载资源
问答
  • STM32F103点亮一个LED程序
  • STM32点亮一个LED

    2019-08-17 23:24:54
    STM32点亮一个LED 一、环境 OS:Win7 64位 Keil:keil5 MCU: STM32F103C8T6 下载方式:Elink 二、准备工作 (一)GPIO外设的功能分析 图:I/O端口位的基本结构 STM32F103C8T6共有2组GPIO端口:PA、PB,每组16个端口。...

    STM32点亮一个LED

    一、环境

    OS:Win7 64位
    Keil:keil5
    MCU: STM32F103C8T6
    下载方式:Elink

    二、准备工作

    (一)GPIO外设的功能分析

    图:I/O端口位的基本结构
    在这里插入图片描述
    STM32F103C8T6共有2组GPIO端口:PA、PB,每组16个端口。每个端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。
    GPIO端口的每个位可以由软件分别配置成多种工作模式:
    —输入浮空
    —输入上拉
    —输入下拉
    —模拟输入
    —开漏输出
    —推挽式输出
    —推挽式复用功能(本次实验使用该功能)
    —开漏复用功能

    (二)USER_LED与STM32硬件连接关系

    在这里插入图片描述

    (三)调用标准库初始化GPIO外设

    1、使能GPIO的时钟
    在这里插入图片描述
    从上面的系统结构图可见,GPIOB位于APB2系统总线上,因此,GPIO的时钟使能使用如下函数:
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
    2、配置GPIOB端口到第8个IO口
    GPIO_InitTypeDef GPIO_InitStruct;
    GPIO_InitStruct.GPIO_Pin=GPIO_Pin_8;
    3、配置PB8为推挽输出模式(配置GPIO_MODER)
    GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP; //推挽输出模式
    5、配置PB8的输出速度为50MHz
    GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
    6、初始化GPIO(初始化相应的寄存器)
    GPIO_Init(GPIOB,&GPIO_InitStruct);

    (四)调用标准库点亮一个LED

    经过上面的分析,调用stm32标准库驱动LED。

    三、程序开发

    main.c文件如下:

    #include "stm32f10x.h"
    void delay(int cnt);
    int main(void)
    {
    	GPIO_InitTypeDef GPIO_InitStruct;   
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);   
    	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_8; 
    	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;	//ÍÆÍìÊä³ö
    	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;  
    	GPIO_Init(GPIOB,&GPIO_InitStruct);
    	
    	while(1)
    	{
    		GPIO_SetBits(GPIOB,GPIO_Pin_8);
    		delay(1000);
    		GPIO_ResetBits(GPIOB,GPIO_Pin_8);
    		delay(1000);
    	}
    	
    }
    
    void delay(int cnt)
    {
    	int i,j;
    	for(i=0;i<cnt;i++)
    	{
    		for(j=0;j<0xfff;j++)
    		{}
    	}
    }
    
    

    笔者:2019年8月17日,云南昆明。

    展开全文
  • stm32点亮一个led程序

    2021-07-02 10:26:32
    近来新接触stm32,途中学习的疑惑,32和51有什么区别呢,假设我把它的端口控制都学会了,那和51就没有什么区别吧,接触了几天,确实有很多相似之处,只是51的端口配置比较简单,32的端口因为功能强大,所以配置祥细...

    近来新接触stm32,途中学习的疑惑,32和51有什么区别呢,假设我把它的端口控制都学会了,那和51就没有什么区别吧,接触了几天,确实有很多相似之处,只是51的端口配置比较简单,32的端口因为功能强大,所以配置祥细一些,直接上图了。

    在这里插入图片描述

    它的使用流程是这样的

    首先得端口配置

    下面第一个标记是GPIOA,就是使用GPIOA这个口的功能,如果是使用B口,就是GPIOB了,学会理解,学会修改

    第二个标记这里打开了PIN1~PIN3和PIN7,用哪个打开哪个,简单说就是复制粘贴的事,有样学样复制就行。

    第三个标记是初始化GPIOA,就是这个样子,GPIOA配置成功了
    在这里插入图片描述

    第二部分:定义端口
    32因为不用sbit了,我就直接用define定义端口使用
    在这里插入图片描述

    第三部分:使用端口
    使用的时候,就可以在程序中直接运行名字点亮灯了
    在这里插入图片描述

    配套个程序,让大家参考一下了

    //头文件
    #include “stm32f10x.h”
    #include “GPIOLIKE51.h”
    #define uchar unsigned char
    #define uint unsigned int
    #define PA0 PAout(0) //定义端口
    #define PA1 PAout(1)
    #define PA2 PAout(2)
    #define PA3 PAout(3)
    #define PA7 PAout(7)
    //#define PA GPIOA
    #define PAOUT(x) GPIO_Write(GPIOA, x) //定义PA口

    //函数声明
    void GPIO_Configuration(void);

    //=============================================================================
    //文件名称:Delay
    //功能概要:延时
    //参数说明:nCount:延时长短
    //函数返回:无
    //=============================================================================

    void Delay(uint32_t nCount) //延时子程序
    {
    for(; nCount != 0; nCount–);
    }

    void delay_ms(uint k) //延时子程序
    {
    uint i,j;
    for(i=0;i<k;i++)
    {
    for(j=0;j<3000;j++)
    {
    ;
    }
    }
    }

    //=============================================================================
    //文件名称:main
    //功能概要:主函数
    //参数说明:无
    //函数返回:int
    //=============================================================================
    int main(void)
    {
    GPIO_Configuration();

    PAOUT(0xff);
    
    while (1)
    	{
    		
    	PA0=0;      //点亮灯
    	while(1);   //停止标记 
    				
    }
    

    }

    //=============================================================================
    //文件名称:GPIO_Configuration
    //功能概要:GPIO初始化
    //参数说明:无
    //函数返回:无
    //=============================================================================
    void GPIO_Configuration(void) //端口配置
    {
    GPIO_InitTypeDef GPIO_InitStructure;

    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA , ENABLE);
    //=============================================================================
    //LED -> PC13
    //=============================================================================
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //AIN,IN_FLOATING,IPD,IPU,Out_OD,Out_PP,AF_OD,AF_PP
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    }

    STM32专用keil软件
    .
    软件,注册机,安装教程都有的。
    .
    在这里插入图片描述
    .
    编程软件界面
    .
    在这里插入图片描述
    .

    需要软件请联系岁月哥Q:936559219

    获取,软件整理不容易,9元发送,谢谢理解

    展开全文
  • 在创建好寄存器模板工程的前提下,我将进一步使用寄存器点亮一个LED灯(D1),具体步骤及说明如下:1在开发板原理图中查看LED模块电路原理,易知该模块共8个LED小灯,分别为D1~D8,且共阳极,连接在3.3V的电源上。...

    f9ffff6f059f632532788e8349b2bc65.png

    这是一块普中STM32-F1开发板,具体型号是PZ6806L-STM32F103,用到了

    STM32F103ZET6芯片。在创建好寄存器模板工程的前提下,我将进一步使用寄存器点亮一个LED灯(D1),具体步骤及说明如下:

    1

    在开发板原理图中查看LED模块电路原理,易知该模块共8个LED小灯,分别为D1~D8,且共阳极,连接在3.3V的电源上。

    1d03c03dab1f38c81ea69e5eb9e1c922.png

    灯D1的阴极连接在芯片的26号引脚PC0(GPIO端口C的第0管脚)上,当PC0输出低电平时,发光二极管正向导通,D1被点亮。因此,我将转而对PC0进行操作。

    99904d86d6bea085ff517f00c5fef08b.png

    2

    结合《芯片数据手册》和《中文参考手册》,确定GPIO端口C在内存中的地址。首先,Cortex-M3是32位的内核,其PC指针可以指向232=4G的地址空间,ARM将这4G的存储空间划分成8块大小均为512MB的区域,分别是block0~block7。

    ca6133ab0092e8cbf84f0559ba20f979.png

    block2连接的是STM32的片上外设,根据速度的不同,这些外设分别挂载在APB1、APB2、AHB总线上。相应总线的最低地址为该总线的基地址,例如:APB1的基地址是0x40000000,片上外设就从这个地址开始,所以也称为外设基地址(PERIPH_BASE)。

    4d749efc48852cc7a0e4fad6bd7a0e5d.png

    查阅《寄存器组起始地址表》可知:GPIO端口A ~GPIO端口G都挂接在APB2总线上,其中GPIO端口C的基地址为0x40011000,相对APB2总线的地址偏移为0x00001000。有了外设端口地址后,还需要知道GPIO端口C中各寄存器的地址,可查阅《中文参考手册》关于GPIO寄存器的描述,结果如下:

    cbbf14376a5aa51836022460e3e680ba.png

    另外,STM32为了实现低功耗,将所有外设的时钟都设置成disable(不使能),而使用任何外设都必须先启动相应的时钟,所以还要用到APB2外设时钟使能寄存器(RCC_APB2ENR) ,因为GPIO端口C挂载在APB2总线上。

    接下来,就可以利用这些地址信息来配置stm32f10x.h头文件了,其中第6行定义是将表示地址的立即数先转换成指针类型,再读取该指针指向的内存单元的内容,以实现对寄存器的操作。

    //配置头文件stm32f10x.h//定义外设、APB2、GPIOC基地址及GPIOC所包含的寄存器地址#define PERIPH_BASE ((unsigned int)0x40000000)#define APB2_BASE (PERIPH_BASE + 0x00010000)          #define GPIOC_BASE (APB2_BASE + 0x1000)            #define GPIOC_CRL *(unsigned int*)(GPIOC_BASE + 0x00)#define GPIOC_CRH *(unsigned int*)(GPIOC_BASE + 0x04)#define GPIOC_IDR *(unsigned int*)(GPIOC_BASE + 0x08)#define GPIOC_ODR *(unsigned int*)(GPIOC_BASE + 0x0C)#define GPIOC_BSRR *(unsigned int*)(GPIOC_BASE + 0x10)#define GPIOC_BRR *(unsigned int*)(GPIOC_BASE + 0x14)#define GPIOC_LCKR *(unsigned int*)(GPIOC_BASE + 0x18)//定义AHB、RCC基地址及APB2外设时钟使能寄存器地址//AHB的起始地址是0x40018000(SDIO的地址),标准库中是0x40020000(DMA1外设的地址)#define AHB_BASE (PERIPH_BASE + 0x20000)#define RCC_BASE (AHB_BASE + 0x1000)#define RCC_APB2ENR *(unsigned int*)(RCC_BASE + 0x18)

    3

    在编写主程序main.c之前,我还需要有两个知识储备:C语言位操作方法和寄存器操作方法。

    先看前者,以8位的无符号整型变量A为例,将A的第6位清零,其他位不变,编写代码如下:

    A &= ~(1<<5);
    • 1左移5位,得到0010 0000

    • 按位取反,得到1101 1111

    • 和A相与,第6位被清零,其它位不变

    再看后者,以开启GPIO端口C的时钟为例,根据《中文参考手册》可知,将APB2外设时钟使能寄存器(RCC_APB2ENR) 的“位4”置1即可,编写代码如下:

    RCC_APB2ENR|=(1<<4);

    4

    是时候开始编写主程序main.c了!首先,开启GPIO端口C的时钟;接着,配置GPIO端口C的工作模式和工作速度,在本例中选择通用推挽输出模式且最大速率为50MHz,通过设置端口配置低寄存器(GPIOC_CRL) 即可完成;最后,使用端口位设置/清除寄存器(GPIOC_BSRR)间接控制PC0输出低电平。

    #include"stm32f10x.h"void SystemInit()  //初始化内部FALSH、PLL并且更新系统时钟{  }int main(){  RCC_APB2ENR|=(1<<4);  GPIOC_CRL&=~(0x0f<4*  GPIOC_CRL|=(3<4*  GPIOC_BSRR=(1<16+}

    编译链接0报错,即可将程序通过ARM仿真器下载到开发板内,灯D1被点亮,发出微弱的红光!

    89923d91b639aa206ea5ffa103b61ffc.png

    5

    学习单片机总是从点亮LED灯开始,就好比学习编程语言总是先输出“Hello World !”。如果你完全看懂了以上所述,毋庸置疑,你也会觉得这是一个不错的应用示例,即串起了许多重要的知识点,又能让初学者略感成就。

    在此基础上,可以继续尝试点亮更多的LED灯,以及改变它们的发光样式,常亮或者闪烁都是可以做到的,Just do it !

    展开全文
  • STM32点亮LED程序

    2020-08-11 07:36:34
    这是一个STM32点亮LED程序,含有配置图及相关原理图,简单易懂。
  • stm32f102 点亮一个LED灯例程,
  • STM32初学点亮一个LED

    千次阅读 2019-04-10 13:09:41
    点亮一个LED灯 1、 原理图 2、 程序编写 1) 建立一个工程。 2) 添加库文件。 core_cm3.c system_stm32f10x.c startup_stm32f10x_hd.s stm32 library 3) 建立main函数文件 3、加载.h文件 点击 ...
                                 点亮一个LED灯
    

    1、 原理图
    在这里插入图片描述
    2、 程序编写
    1) 建立一个工程。
    2) 添加库文件。
    core_cm3.c
    system_stm32f10x.c
    startup_stm32f10x_hd.s
    stm32 library
    在这里插入图片描述
    3) 建立main函数文件
    3、加载.h文件
    点击 在这里插入图片描述
    在Options for Target下 Include Paths框内添加.h的路径。
    在这里插入图片描述

    在Preprocessor Symbols 下 Define框中添加USE_STDPERIPH_DRIVER,STM32F10X_HD
    stm32开发环境加入STM32F10X_HD和USE_STDPERIPH_DRIVER两个宏。
    第一:
    在stm32f10x.h中有以下语句:
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    #error命令是C/C++语言的预处理命令之一,当预处理器预处理到#error命令时将停止编译并输出用户自定义的错误消息。
    语法:
    #error [用户自定义的错误消息]
    注:上述语法成份中的方括号“[]”代表用户自定义的错误消息可以省略不写。
    举例:
    #error “Sorry,an error has occurred!”
    可见,只有我们定义了STM32F10X_HD这个宏,才可以顺利编译,进而,根据定义的这个宏,定义将会用到的与外设有关的宏!!!

    ============================================================================================================
    第二:

    在stm32f10x.h中有以下语句:
    在这里插入图片描述
    只有在开发环境中定义了USE_STDPERIPH_DRIVER宏,才可以将stm32f10x_conf.h头文件包含进来,
    而正是stm32f10x_conf.h这个头文件,将我们要用到的…\STM32F10x_FWLib\inc目录下的23个头文件都包含了进来!
    否则,我们无法使用…\STM32F10x_FWLib\src中的固件库了!!!
    3、 GPIO初始化
    GPIO_InitTypeDef GPIO_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 ;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOF, &GPIO_InitStructure);

    ============================================================================================================
    (1)声明一个结构体 GPIO_InitTypeDef GPIO_InitStructure;
    这个结构体中包括GPIO_Pin 、GPIO_Mode、GPIO_Speed 。

    (2)端口使能: RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE);
    调用上述函数,函数参数第一个是你要使能端口,第二个是ENABLE,就是使能。如果其中用到几个端口,在第一个参数中
    用或运算“|”连接,就可以同时声明几个端口。

    (3) GPIO_InitStructure.GPIO_Pin 端口配置,就是你要用哪个IO口
    GPIO_InitStructure.GPIO_Mode 模式设置,表明IO口的功能是什么,在STM32中IO口有8种模式
    GPIO_InitStructure.GPIO_Speed IO口速度设置,在STM32中IO口有3中速度
    注: IO口的八种模式:1、输入浮空 2、输入上拉 3、输入下拉 4、模拟输入 5、开漏输出 6、推挽输出 7、推挽式复用功能 8、开漏复用功能
    IO口的三种速度:10MHZ、2MHZ、50MHZ

    (4)根据设定参数初始化GPIO口 GPIO_Init(GPIOA, &GPIO_InitStructure);

    5、IO的高低电平操作
    GPIO_SetBits 寄存器:BSRR
    GPIO_ResetBits 寄存器:BRR

    GPIO_WriteBit 寄存器:BSRR BRR
    GPIO_Write 寄存器:ODR
    这两个调用的寄存器不同,功能也不同。区别在于
    void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 置高
    void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 置低

    void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
    void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

    前者是直接对IO进行操作,而后者的输入是对整个IO口,如PA口进行操作,你要那位高就在那位置“1”,所以第二组函数的第三个参数应该为一个十六进制的数。

    一般情况下使用使用第一组比较方便。

    void LED_init(void)
    {
    GPIO_InitTypeDef GPIO_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE);  
    
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_4|GPIO_Pin_6;              
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        
    
    GPIO_Init(GPIOA, &GPIO_InitStructure);  
    
    GPIO_SetBits(GPIOA,GPIO_Pin_2); 
    GPIO_SetBits(GPIOA,GPIO_Pin_4); 
    GPIO_SetBits(GPIOA,GPIO_Pin_6); 
    }
    
    展开全文
  • STM32点亮LED程序

    千次阅读 2019-03-31 14:42:51
    #include"led.h" /* * @brief None program. * @param None * @retval None * */ void LED_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd...
  • 很简单的STM32点亮一个led灯,很基础,希望能够帮助到初学者
  • 单片机型号:STM32L053R8T6 今天调试在自己的程序框架下调试RTC始终不成功,...本日志从工程的建立讲到点亮一个LED。 1、启动STM32CubeMX,我现在使用的版本是5.2.1。 2、File-New Project,选择相应的芯片类...
  • 开发环境: 开发板:STM32PZ6806L 芯片:ARM_STM32F103_ZE 软件开发环境:KEIL5开发所需资料:STM32F1XX芯片电路原理图 STM32F1XX系列芯片手册XX...第步,分析电路原理图首先第步打开STM32F1XX芯片的电路原理...
  • "学习51单片机的时候,第一个程序点亮LED灯现在开始学习到STM32一个程序必须也得是点亮LED灯因为“祖师爷”说过当能够输出"Hello World!"或者点亮LED灯的时候,就掌握了90%的知识,可以出师了1注:虽然现在趋势...
  • 程序内有详细的讲解文档,很好的学习资料,欢迎大家下载学习
  • stm32f103点亮led

    2021-01-19 11:04:59
    stm32f103点亮led
  • STM32点亮一个LED灯-用寄存器实现 前言
  • 前言 就是纯粹地记录一下上课的STM32的作业内容而已,以备以后忘了查阅。 板子型号:STM32F446ZET 创建工程 第一步——打开 STM32...点击闪烁的黑点,弹出一个下拉栏,选择GPIO_Input,左键单击后完成设置。 同理地
  • STM32入门点亮LED程序

    千次阅读 2019-03-26 12:52:34
    最近在学习STM32,写了几个点亮和流水灯的简单程序 有时间再更新 #include “stm32f10x.h” void RCC_Configuration(void);//2 void GPIO_Configuration(void);//GPIO void Delay(u32 count) { u32 i=0; for(;i<...
  • 软件仿真在一定程度上可以在设计的初期发现程序的错误,减少我们下载到开发板的麻烦。但是纯软件的仿真的正确,也不能保证程序...有时候仿真正确,实物却没这效果。有时软件仿真结果是错误,你分析你的程序却没错误。
  • 如何利用CubeMX生成代码驱动STM32H750点亮一个LED灯CubeMX软件的配置GPOI或者说引脚配置第一步第二步工程文件的配置最后一步:完整生成好的代码 CubeMX软件的配置 如图中所示,首先选中具体是哪个单片机的型号。...
  • 打开STM32CubeMx软件,实现第步,设置配置参数! 第二步,设置生成属性,点击右上方GENERATE CODE 第三步,简单修改代码,在while(1) 添加这四行代码,如下所示 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, ...
  • 利用keil编写stm32循环点亮一LED

    万次阅读 2014-04-15 09:34:22
    利用keil编写stm32循环点亮一LED灯 在tiaos
  • STM32CubeMX-GPIO:点亮一个LED

    千次阅读 2020-08-05 02:30:40
    我们通过点亮一个LED来深入的了解STM32CubeMX,(点亮LED是刚接触单片机写的第一个程序,就像刚开始学习编程时打印的“Hello World ”) STM32CubeMX:版本6.00 MDK-ARM:版本5.29 平台:原子的探索者开发板(407...
  • 汉化,修改主题,以及新建一个工程点亮一个LED
  • stm32点亮一个led灯(初学)

    万次阅读 多人点赞 2014-04-25 20:03:44
    作为名初学stm32的人应该都具备了51
  • STM32点亮一个LED灯-用位带操作实现 前言 位带的代码比库函数和寄存器都要简洁,在之后编程的一些步骤里面可能也会用到简单的位带操作。
  • STM32点亮-LED

    2014-04-17 07:58:21
    本人精心整理的STM32文档,值得收藏,免积分,欢迎下载我的其他资源!!!
  • 基于STM32点亮LED

    2014-11-08 20:58:14
    基于stm32f103zet6点亮LED
  • STM32点亮LED灯 代码

    2017-12-03 13:59:46
    详细介绍了有关STM32如何编写LED的过程,并且有附带代码,推荐刚上手的新人读取并下载。
  • STM32入坑教程(一)点亮一个LED

    千次阅读 2020-05-28 15:26:10
    STM32入门教程(一)点亮一个LED灯随表聊聊配置流程一.初始化引脚二.主函数中实现逻辑备注 随表聊聊 作为所有入坑单片机的同学来说,第一个单片机程序必然是点亮一个LED灯,这就类似于学编程第一个程序必然是‘Hello...
  • stm32--点亮一个LED编码

    2019-01-20 09:15:53
    目标:使用库函数一个LED闪烁 main.c #include "stm32f10x.h" #include "led.h" typedef unsigned int uint; void delay(uint i) { while(i--); } int main() { LED_INIT(); //初始化LED ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,701
精华内容 1,480
关键字:

stm32点亮一个led程序