| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> STM32F103寄存器方式点亮LED流水灯 -> 正文阅读 |
|
[嵌入式]STM32F103寄存器方式点亮LED流水灯 |
目录 一、STM32F103系列芯片的地址映射和寄存器映射原理和GPIO端口的初始化设置三步骤 二、以 STM32最小系统核心板(STM32F103C8T6)+面板板+3只红黄绿LED 灯搭建电路,轮流闪烁,间隔时长1秒。? 一、STM32F103系列芯片的地址映射和寄存器映射原理和GPIO端口的初始化设置三步骤1.STM32F103的存储器映射&寄存器映射存储器映射??????? 在STM32内部的每个内存块存放不同的功能,而每个内存块都有地址。每个内存块中又分为好几个内存块,每个内存块有不同的寄存器,一个地址存放4个字节,在STM32内存中,1个地址存放32位的寄存器,有的寄存器有可能用不到32位(地址之间都相差4,比如第一个地址为0x00,那第二个地址为0x04),只用其中的低16位,那高16位将被保。外设内存块中,GPIO的内存块,在这个内存块中又分为GPIOA内存块,GPIOB内存块等等,内存块中存放的就是一些寄存器,每4个地址存放一个32位的寄存器。偏移地址是基于每个最小内存块(就是像GPIOA,GPIOB之类的内存块)的首地址。每个最小内存块都有地址范围,且GPIO内存块的首地址就是GPIOA内存块的首地址。 ? ? ? 寄存器映射寄存器映射:给具有特殊功能的内存块的首地址取一个具有特殊意义名称的过程就叫做寄存器映射。?????? ?????? 学过C语言的同学都知道指针,我们要想取地址中的值必须利用指针,比如GPIOA_OTYPER寄存器的偏移地址为0x04,且GPIOA内存块的首地址为0X4000 0000,那么我们就可以利用下面的方式来取寄存器中的值。 首先我们知道GPIOA_OTYPER寄存器的地址为(0x04+0x4000 0000),这样写还不够,因为编译器并不知道这是地址,所以我们利用指针将其转成地址(unsigned int *)(0x04+0x4000 0000),最后我们再利用指针*(unsigned int *)(0x04+0x4000 0000)就可以读写寄存器了。 #define??GPIOA_OTYPER? ? ??*(unsigned int *)(0x04+0x4000 0000)这就是寄存器映射。 2.GPIO端口的初始化设置三步骤GPIO端口初始化时,需要下面的步骤:
二、以 STM32最小系统核心板(STM32F103C8T6)+面板板+3只红黄绿LED 灯搭建电路,轮流闪烁,间隔时长1秒。?1.STM32核心板原理图2.安装CH340-driver驱动3.检查端口右击我的电脑,点击管理,点击设备管理器查看端口 4.将核心板的BOOT调为1,05.搭建流水灯电路对于USB转TTL模块和stm32f103c8t6连接 GND — GND,3v3 — 3v3,TXD — A10,RXD — A9,黄灯—A0,绿灯—B0,红灯—C15 6.代码实现并进行烧录1.新建项目 ? ?在右边文件夹添加新文件: 选择一个.c文件进行创建。 之后将所需要的启动文件复制到项目目录下(f103c8t6启动文件为startup_stm32f10x_md.s: 然后将其添加到文件夹: ? ?最终结果: ?打开魔术棒,如下图所示勾选Create HEX File: ? ?输入代码:
核心板由8个管脚控制,因此首先必须进行初始化8个引脚。先开启GPIOB,GPIOC,GPIOA时钟,然后依次设置参数,然后为了实现流水效果,我的原理是依次让每个灯亮,每个灯之间添加延时函数Delay_ms进行点灯和灭灯操作,以实现流水的效果。 进行编译并生成了LED.hex文件 ?将面包板和USB连接到电脑,打开mcuisp,上传HEX文件到stm32f103c8t6上并烧录: ?7.最终结果演示三、总结???? ?? 本次流水灯实验难度相对较大,对于我来说比较困难的几个点在于:电路的搭建和端口识别问题,但这些问题都在同学和论坛大佬的帮助下一一解决了。随着学的东西越高级,我就越能体会到基础的重要,不能害怕BUG,因为错,才会有经验。我应该学会和同学讨论,交流出新知,利用网上的教学视频和博客。通过本实验的学习,我对C语言调用函数参数的传递方式以及寄存器使用方法有了更加深刻的理解。 四、参考链接 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
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年11日历 | -2024/11/26 6:33:29- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |