| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 【嵌入式基础】用C语言编程、寄存器实现LED流水灯程序;stm32CubeMX+Keil使用HAL库点亮流水灯 -> 正文阅读 |
|
[嵌入式]【嵌入式基础】用C语言编程、寄存器实现LED流水灯程序;stm32CubeMX+Keil使用HAL库点亮流水灯 |
本文主要介绍STM32F103系列芯片的地址映射和寄存器映射原理,GPIO端口的初始化设置步骤、利用C语言编程和寄存器点亮流水灯以及stm32CubeMX+Keil使用HAL库点灯 目录 3、GPIO端口的初始化设置三步骤(时钟配置、输入输出模式设置、最大速率设置) ?五、stm32CubeMX+Keil使用HAL库点亮流水灯 一、STM32F103系列芯片的地址映射和寄存器映射原理1、什么是寄存器? ? ? ?根据百度百科介绍,寄存器是中央处理器内的组成部分。 ?寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。 ? ? ? ?这是比较专业化的解释,理解起来比较难,简单来说,寄存器就是存放东西的一个空间器物。寄存器可能存放的是指令、数据或地址。 2、地址映射和寄存器映射原理(1)地址映射:由百度词条可知为了保证CPU执行指令时可正确访问存储单元,需将用户程序中的逻辑地址转换为运行时由机器直接寻址的物理地址,这一过程称为地址映射。 3、GPIO端口的初始化设置三步骤(时钟配置、输入输出模式设置、最大速率设置)(1)GPIO初始化步骤第一步:使能GPIOx口的时钟 (2)GPIO简介GPIO 是通用输入输出端口的简称,简单来说就是 STM32 可控制的引脚,STM32 芯片的 GPIO 引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。STM32 芯片的 GPIO 被分成很多组,每组有 16 个引脚。 如型号为 STM32F103VET6 型号的芯片有 GPIOA、GPIOB、GPIOC至 GPIOE共 5组 GPIO,芯片一共 100个引脚,其中 GPIO就占了一大部分,所有的 GPIO 引脚都有基本的输入输出功能。 最基本的输出功能是由 STM32 控制引脚输出高、低电平,实现开关控制,如把 GPIO引脚接入到 LED灯,那就可以控制 LED灯的亮灭,引脚接入到继电器或三极管,那就可以通过继电器或三极管控制外部大功率电路的通断。 最基本的输入功能是检测外部输入电平,如把 GPIO 引脚连接到按键,通过电平高低 (3)GPIO模式GPIO的工作模式主要有八种:4种输入方式,4种输出方式。 分别为输入浮空,输入上拉,输入下拉,模拟输入; GPIO 8 种工作模式:
4、为什么要先配置时钟,再配置GPIO?所有寄存器都需要时钟才能配置,寄存器是由D触发器组成的,只有送来了时钟,触发器才能被改写值。 任何MCU的任何外设都需要有时钟,STM32为了让用户更好地掌握功耗,对每个外设的时钟都设置了开关,让用户可以精确地控制,关闭不需要的设备,达到节省供电的目的。 51单片机不用配置IO时钟,只是因为默认使用同一个时钟,这样是方便,但是这样的话功耗就降低不了。 例如,某个功能不需要,但是它还是一直运行。 当你想关闭某个IO的时候,关闭它相对应的时钟使能即可,不过在51里面,在使用IO的时候是没有设置IO的时钟的,在STM32中,有外部和内部时钟之分。 ARM的芯片都是这样,外设通常都是给了时钟后,才能设置它的寄存器(即才能使用这个外设)。STM32、LPC1XXX等等都是这样。 二、以寄存器方式点亮流水灯1、题目要求假设你手中已有 STM32最小系统核心板(STM32F103C8T6)+面板板+3只红绿蓝LED,并搭建了电路,分别GPIOA-5、GPIOB-9、GPIOC-14 这3个引脚上控制LED灯(最高时钟2Mhz),轮流闪烁,间隔时长1秒。 1)写出程序设计思路,包括GPIOx端口的各寄存器地址和详细参数; 2)用C语言 寄存器方式编程实现。 2、建立工程文件新建工程Light1文件,工程名为Light,选择STM32F103C8 到这里,我们还只是建了一个框架,还需要添加启动代码,以及.c 文件等。 先介绍一下启动代码:启动代码是一段和硬件相关的汇编代码。 ST 公司提供了 3 个启动文件给我们,分别用于不同容量的 STM32 芯片,这三个文件是: 其Flash容量为128K,属于中容量,因此我在这里采用 可以到这个网址去下载:http://www.openedv.com/posts/list/313.htm
我们找到 Target1→Source Group1→双击→设置打开文件类型为 Asm Source file→选择 startup_stm32f10x_md.s→点击 Add,如下图所示: ?添加完成之后,得到以下画面: 先关闭 KEIL 软件,为了不让之后生成的文件显得混乱,在Light1文件夹下新建一个OBJ文件夹和USER文件夹, OBJ 用来存放这些编译过程中产生的中间文件(包括.hex 文件也将存放在这个文件夹里面)。USER 文件夹专门用来存放启动文件(startup_stm32f10x_md.s)、工程文件等不可缺少的文件,而然后把 DebugConfig和Listings 和Objects 文件夹全部移到 OBJ 文件夹下,剩余的全部移到USER文件夹里。 在 USER 文件夹下面找到 light. ?在上面对话框的中间栏,点新建,新建 USER 和 SYSTEM 两个组。然后点击 Add Files 按钮,把 SYSTEM 文件夹三个子文件夹里面的:sys.c、usart.c、delay.c 加入到 SYSTEM 组中。注意:此时 USER 组下还是没有任何文件,我们只添加SYSTEM的三个。 ?上面都创建好之后,得到以下界面: ?此时,USER文件夹里没有文件的,我们在USER文件夹下新建一个 test.c 文件,然后双击 USER 组,会弹出加载文件的对话框,此时我们在 USER 目录下选择test.c?文件,加入到 USER 组下。 如果我们此时编译的话,生成的中间文件,还是会存放在 Listings 和 Objects 文件夹下,所以,我们先设置输出路径,再编译。 点击魔法棒,弹出 Options for Target’Target 1’对话框,选择 Output 选项卡→选中 Create Hex File(用于生成 Hex 文件,后面会用到)→点击 Select Folder for Objects→找到 OBJ 文件夹→点击 OK ? ?接着,再设置 Listings 文件路径,在图 3.2.16 的基础上,打开 Listing 选项卡→点击 Select ?加入sys、delay、usart的include路径: ?注意!我们必须根据所用 STM32F1 型号的容量,来输入相关宏定义,对于STM32F103 系列芯片,设置原则如下:
?至此,一个完整的 STM32F1 开发工程模板下建立好了。接下来我们就可以进行代码下载和仿真调试了。 3、使用寄存器点亮LED灯——代码部分(1)硬件连接设计根据题目要求,使用 图中从 3 个 LED 灯的阳极各经过 1 个限流电阻连接到 3.3V 电源,阴极连接STM32 的 3 个 GPIO 引脚中,所以我们只要控制这三个引脚输出高低电平,即可控制其所连接 LED 灯的亮灭。 (2)代开之前建立的工程,编写代码在Light1文件夹下新建一个CODE文件夹,用来存储以后与硬件相关的代码。 ?然后我们打开 USER 文件夹下的Light.uvprojx 工程,新建两个文件,然后保存CODE→LED 文件夹下面,保存为 led.c,led.h ?在魔法棒这里将CODE路径加进去,否则之后会报错。 ?下面来编写led.c文件,要用到GPIOB、GPIOC、GPIOD则,对应时钟设置: ?在设置完时钟之后就是配置完时钟之后,LED_Init 配置了 目标三个端口 PB0 PB5 PA1 的模式为推挽输出, led.c
led.h
?在USER文件夹的test.c中撰写main函数 test.c
代码包含了#include "led.h"这句,使得 LED0、LED1、LED2、LED_Init 等能在 main 函数里被调用。 ?接下来就可以进来硬件操作了! (3)硬件连接打开C8T6数据手册,查找TXD和RXD管脚位置 ?务必将boot0设为1,boot1设为0,利用跳线帽实现 ?(4) 烧录:STM32F103C8T6与PC端连接?借助FLYMCU下载软件,即可将Light.hex载入 ?四、使用寄存器点亮LED灯——电路部分芯片面包板连好电路后,通电,LED满足实验要求 ?在将C8T6连接到电路板之前,一定要先将BOOT0置位0,否则电路无效!!! ?点灯实况 ?五、stm32CubeMX+Keil使用HAL库点亮流水灯1、题目要求(1)安装 stm32CubeMX,用cubemx完成初始化过程,采用HAL库编程实现。 (2)在Keil下用软件仿真运行上面代码,并用虚拟逻辑分析仪观察 对应管脚上的输出波形(高低电平转换),看是否是1秒的周期。 2、STM32CubeMX简介与下载STM32CubeMX 是 ST 意法半导体近几年来大力推荐的STM32 芯片图形化配置工具,目的就是为了方便开发者, 允许用户使用图形化向导生成C 初始化代码,可以大大减轻开发工作,时间和费用,提高开发效率。STM32CubeMX几乎覆盖了STM32 全系列芯片。 关于STM32CubeMX的安装教程,可参考此博客【STM32】STM32 CubeMx使用教程一--安装教程_Z小旋的博客-CSDN博客_cubemx 3、利用CubeMX新建工程点亮LED灯(1)前期准备在本次实验中,使用到的STM32硬件为,STM32F103C8T6; (2)新建工程搜索芯片型号–>选择芯片–>创建工程 1 在主界面选择 ? ?(3)界面介绍? 1.左侧为MCU外设资源选择 引脚预览可以查看引脚配置了什么功能,和各个引脚的位置; 系统预览是查看配置的各种外设和GPIO的状态 右侧第三个对勾图标,表示没有问题; (4)配置引脚只需把目标LED对应引脚设置为GPIO_Output即可 点击system core,进入里面的sys,在debug那里选择serial wire ?接下来进行配置时钟,进入RCC,有两个时钟HSE,LSE,我们要用GPIO借口,这些接口在APB2里 ?所以我们把HSE那里设置为Crystal/Ceramic Resonator就行了 (5)配置工程环境接下来就是点击相应的引脚设置输出寄存器,output哪一项,PA7、PA10、PB6 且在output level那一项选择high ? 点击Project Manager 配置好自己的路径名和项目名,然后改名 ?进入Code Generate界面,选择生成初始化文件.c/.h,之后在点击GENERATE?CODE就行了 ?打开刚刚生成的项目将main.c的主函数,在while循环部分添加以下代码
?提醒:所有自己编写的代码请放在/* USER CODE BEGIN XXX?/ /?USER CODE END XXX */之间; 4、编译及烧录编译发现没有报错,那么进行烧录啦 ?将C8T6与USB转TTL相连,接入电脑端,打开FlyMcu进行烧录 效果图如下: ?五、总结通过此次实验,可以深刻了解STM32F103寄存器方式点亮LED流水灯的方式,同时对寄存器和keil操作有了更加深刻的认识,HAL库提供的可视化界面大大提高了编程效率,无需再利用代码去配置管脚了,效果很好,受益匪浅,通过烧录程序,更加增强了动手操作能力;而且,面包板是个很方便的东西,比焊接快多了,以后可以多多利用。 六、参考文献stm32 GPIO简单介绍及初始化配置(库函数)_朕不是皇的博客-CSDN博客_gpio初始化 ?【STM32】STM32 CubeMx使用教程一--安装教程_Z小旋的博客-CSDN博客_cubemx https://blog.csdn.net/qq_46467126/article/details/120737655 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/28 1:53:08- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |