【嵌入式系统开发08】STM32F103C8T6搭建电路实现流水灯详解
本文目的是主要介绍通过STM32F103C8T6+面板板+3只红绿蓝LED,搭建了电路,实现流水灯,同时写出程序设计思路,用C语言寄存器方式编程实现。
文章目录
- (一)需求分析
- 1.问题重述
- 2.硬件需求
- (二)STM32F103C8T6简介
- (三)GPIO端口初始化
- 1.时钟配置
- 2.输入输出配置及最大速率的配置
- (四)点灯实验步骤
- 1.点灯程序设计理念
- 2.S-TLINK检查
- 3.新建工程文件
- (五)代码编写及编译调试
- 1.编写.c文件
- 2.编写.h文件
- 3.main主函数编写
- 4.启动文件加入
- (六)虚拟逻辑分析仪仿真观察
- 1.前置设备
- 2.进入DEBUG观察
- (七)硬件实现
- 1.搭建电路
- 2.下载烧录软件
- 3.HEX文件烧录实现
- (八)总结
- (九)参考文献
(一)需求分析
1.问题重述
运用 STM32最小系统核心板(STM32F103C8T6
)+面包板
+3只红绿蓝LED
,并搭建了电路,分别GPIOA-5
、GPIOB-9
、GPIOC-14
这3个引脚上控制LED灯(最高时钟2Mhz),轮流闪烁,间隔时长1秒。
1)写出程序设计思路,包括GPIOx端口的各寄存器地址和详细参数;
2)用C语言寄存器方式编程实现。
2.硬件需求
※ 多根杜邦线、红绿黄LED灯、面包板、STM32F103C8T6、CH340 USB转TTL,ST-LINK
。
(二)STM32F103C8T6简介
※ STM32F103C8T6
是一款由意法半导体公司(ST)推出的基于Cortex-M3内核的32位微控制器,硬件采用LQFP48封装,属于ST公司微控制器中的STM32系列。
● STM32代表STM32家族,32位MCU;
● F代表产品类型为基础型;
● 103代表特定功能为STM32基础型;
● C代表引脚数为48&49引脚;
● 8代表内存容量为64KB;
● T代表封装为QFP;
● 6代表温度范围为-40到+85℃。
内核 | Cortex-M3 |
---|---|
Flash | 64K x 8bit |
SRAM | 20K x 8bit |
GPIO | 37个GPIO,分别为PA0-PA15、PB0-PB15、PC13-PC15、PD0-PD1 |
ADC | 2个12bit ADC合计12路通道(外部通道:PA0到PA7+PB0到PB1,内部通道:) |
Timers | 4个16bit定时器/计数器,分别为TIM1、TIM2、TM4 TM1带死区插入,常用于产生PWM控制电机 |
通信串口 | 2IIC,2SPI,3USART,1CAN |
注意:建立模板要用到的SYSTEM文件及启动文件,包括点灯时需要的C8T6数据手册,以及烧录用到的FlyMcu,网盘自取。
链接:https://pan.baidu.com/s/1jxbVCa_filfR9ZRlmP6SMw
提取码:k4lv
(三)GPIO端口初始化
1.时钟配置
● 任何外设都需要时钟,51单片机,STM32等等,因为寄存器是由D触发器组成的,往触发器里面写东西,前提条件是有时钟输入。
● 51单片机不需要配置时钟,是因为一个时钟开了之后所有的功能都可以使用,而在51中这个时钟是默认开启的,但是也存在一个问题,耗能大。
● STM32之所以是低功耗,因为它将所有的门都默认设置为disable,在你需要用哪个门的时候,开哪个门就可以,也就是说用到什么外设,只要打开对应外设的时钟就可以,其他的没用到的可以还是disable,这样耗能就会减少。
● 根据数据手册可知,抚慰和时钟控制RCC(时钟控制)地址从0x4002 1000开始,根据外设偏移地址为0x18,可以确定APB2的地址为0x4002 1018,根据下图可得GPIOB的时钟使能控制位为第3位,因此将位3赋值为1,即开启GPIOB的时钟代码如下:
2.输入输出配置及最大速率的配置
● 现代滤波是指用模拟电子电路对模拟信号进行滤波操作,其基本原理就是利用电路的频率特性实现对信号中频率成分的选择。滤波时,把信号看成由不同频率正弦波叠加而成的模拟信号,通过选择不同的频率成分来实现信号滤波。在计算机实际应用中,需要将模拟量转换为数字量(即进行A/D转换),为解决干扰问题,常用的方法主要有中值滤波
和均值滤波
。
● 现代滤波器的主要内容是从含有噪声的数据记录中估计出信号的某些特征或信号本身。一旦信号被估计出,那么利用它们的统计特征,如自相关函数、功率谱等,导出一套最佳的估值算法,所得到的估计信号的信噪比会比原信号更高。典型的现代滤波器是维纳滤波器。
对于常用的数字滤波器,一般分为IIR滤波器
和FIR滤波器
。
(四)点灯实验步骤
1.点灯程序设计理念
根据所学知识,简要设计一些点灯流程
● 首先要进行GPIO初始化(包括所用的引脚及时钟)——寄存器代码编写——仿真并用虚拟逻辑分析仪观察—— Hex文件烧录硬件实现
。
● 这是利用寄存器点流水灯的大致过程,先安装所需STM32F1系列支持包。
2.S-TLINK检查
● 首先将S-TLINK插入电脑的一个端口。
● 打开设备管理器,检查S-TLIN驱动设备是否安装好。
可以看见,此图标没有带感叹号,所以已安装好。
3.新建工程文件
● 建立LED文件,放在相应的目录下,文件名命名为light
。
● 本次点灯操作采用STM32F103C8T6芯片,所以选择芯片为STM32F103C8
。
环境搭建好后,进行编程。
(五)代码编写及编译调试
1.编写.c文件
● 首先在工程中添加.c文件,在Target1
-Source group1
,右键-Add New Item…
,在弹出的窗口中选中.c
文件,填写文件名保存,到此完成.c
文件的添加。
● 这里将.c
文件命名为led
文件。
● 再写入代码,注意项目结构,使用的引脚是GPIOA-5、GPIOB-9、GPIOC-14
这3个引脚上控制LED灯。
注:这里已经根据上述数据指南,成功找到三个引脚所代表的复位值。
#include "led.h"
//初始化PA5 PB9 PC14为输出口.并使能这三个口的时钟
//LED IO 初始化
void LED_Init(void)
{RCC->APB2ENR|=1<<2; //使能 IOPA 时钟 RCC->APB2ENR|=1<<3; //使能 IOPB 时钟 RCC->APB2ENR|=1<<4; //使能 IOPC 时钟
// RCC->APB2ENR|=1<<5; //使能 IOPD 时钟 GPIOA->CRL&=0XFF0FFFFF; GPIOA->CRL|=0X00300000;//PA.5 推挽输出 GPIOA->ODR|=1<<5; //PA.5 输出高GPIOB->CRH&=0XFFFFFF0F; GPIOB->CRH|=0X00000030;//PB.9 推挽输出 9属于端口配置高位寄存器GPIOB->ODR|=1<<9; //PB.9 输出高 GPIOC->CRH&=0XF0FFFFFF; GPIOC->CRH|=0X03000000;//PC.14 推挽输出 GPIOC->ODR|=1<<14; //PC.14 输出高
}
2.编写.h文件
● .h
是C语言和C++语言的头文件。
● 一般在类的头文件里面只放入函数声明,宏定义,函数原型,而具体的实现在文件里面。
● 在编译的时候,编译器会自动加载和.h
匹配的.cpp
文件。
● 输入头文件函数相应的代码。
#ifndef __LED_H
#define __LED_H
#include "sys.h"
//LED ¶Ë¿Ú¶¨Òå
#define LED0 PAout(5) // DS0
#define LED1 PBout(9) // DS1
#define LED2 PCout(14) // DS2
void LED_Init(void); //初始化
#endif
3.main主函数编写
#include "sys.h"
#include "delay.h"
#include "ledhead.h"
#include "stm32f10x.h"int main(void)
{ Stm32_Clock_Init(9); //系统时钟设置delay_init(72); //延时初始化LED_Init(); //初始化与LED连接的硬件接口while(1){LED0=0;LED1=1;LED2=1;delay_ms(1000);LED0=1;LED1=0;LED2=1;delay_ms(1000);LED0=1;LED1=1;LED2=0;delay_ms(1000);}
}
4.启动文件加入
● 此时我们的代码还不能运行,因为还没有将启动文件引入。
● 选择后缀名为md.s的文件。
● 此时发现还不行,还需要加入外设寄存器描述文件,还有两个system文件来配置时钟。
● 再将system的文件引入,主函数得以运行。
(六)虚拟逻辑分析仪仿真观察
1.前置设备
● 首先打开魔法棒,进行修改参数。
● 修改一下相应参数。
● 记得打开Keil自带的仿真模拟器。
2.进入DEBUG观察
● 点击Setup
进行修改相应参数。
● 点击运行
※ 最终实现如下
(七)硬件实现
1.搭建电路
●将硬件进行搭建,为GPIOA-5、GPIOB-9、GPIOC-14 这3个引脚上控制LED灯(最高时钟2Mhz),轮流闪烁,间隔时长1秒,得到最终电路连接如下。
2.下载烧录软件
● FlyMcu仿真软件下载与安装,将压缩文件解压即可直接使用。
3.HEX文件烧录实现
(八)总结
本文目的是主要介绍通过STM32F103C8T6+面板板+3只红绿蓝LED,搭建了电路,实现流水灯,同时写出程序设计思路,用C语言寄存器方式编程实现,嵌入式开发本是博主短板,但功不唐去捐终入海。
寄语:好累
这次没有什么鸡汤了
只需好好休息便好!
(九)参考文献
[1]https://blog.csdn.net/houlile_sunny/article/details/127154537?spm=1001.2014.3001.5502
[2]https://blog.csdn.net/weixin_47554309/article/details/120810913
【嵌入式系统开发08】STM32F103C8T6搭建电路实现流水灯详解相关推荐
- 【嵌入式08】STM32F103C8T6寄存器方式借助面包板点亮LED流水灯详解
文章目录 一.题目简述 二.简述:初始化GPIO,点亮LED灯 三.工程文件模板的建立 四.使用寄存器点亮LED灯--代码部分 1.硬件连接设计 2.打开之前建立的工程模板 3.代码编写 4.硬件连接 ...
- STM32F103C8T6以寄存器方式借助面包板搭建电路点亮LED流水灯详解
文章目录 一.寄存器原理 1.什么是寄存器 2.如何访问寄存器 二.GPIO端口的初始化设置 1.时钟配置 (1)找到时钟使能寄存器映射基地址 (2)找到端口偏移地址以及对应端口所在位置 (3)使能对 ...
- 嵌入式系统开发13——STM32输出PWM实现呼吸灯
本文主要介绍在STM32F103C8T6上,利用定时器输出PWM波形,进而驱动LED实现呼吸灯. 目录 一.任务要求 二.PWM简介 1.什么是PWM 2.相关概念 3.PWM的产生 4.PWM的通道 ...
- 打印系统开发(25)——C#打印设置实现源码详解
C#打印设置是如何在实际编程开发中体现的呢?C#打印设置需要注意什么呢?C#打印设置常用属性是如何进行操作的呢?让我们在实例中解决这些问题吧: C#打印设置实例代码: using System; us ...
- 嵌入式系统开发-学习路线
嵌入式系统开发 课程链接 随着嵌入式设备的普及,嵌入式应用的需求量也随之增大,本课程将重点培养基于linux系统下的嵌入式应用开发,包括5个阶段,其中课程涵盖了linux系统下的多进程.多线程嵌入式开 ...
- 【嵌入式系统开发09】重做LED灯以及串口通信查询
[嵌入式系统开发09]重做LED灯以及串口通信查询 要求:安装 stm32CubeMX,配合Keil,分别尝试使用寄存器地址方式(汇编或C,不限) 和HAL库这两种方式,完成下列任务: 1.LED灯重 ...
- 嵌入式系统开发怎样快速度入门
http://wenda.tianya.cn/wenda/thread?tid=392a249d9d6856c5 实践当然是最锻炼人的方式,但是我想在校生很少有这样的机会,别说本科生,硕士生也未必有条 ...
- arm板telnetd为什么运行不了_一种基于ARM的嵌入式系统开发的方案详细讲解
背景介绍 在日益信息化的社会中,各种各样的嵌入式系统已经全面渗透到日常生活的每一个角落.嵌入式系统的功能越来越复杂,这就使得一个嵌入式系统产品从市场需求立项到方案选择.样机研制.定型量产所需要的开发费 ...
- 嵌入式系统开发笔记0_0:目录
本系列文章将向大家介绍嵌入式系统开发的各方面知识. 本系列文章所介绍的知识和内容,除电路图设计外,其它均采用开源系统,所以你不会在这个系列文章中看到Keil.IAR等软件. 本系列文章涉及C.C++. ...
- 面向对象嵌入式系统开发7-嵌入式系统的实现
面向对象嵌入式系统开发7-嵌入式系统的实现 如果说嵌入式系统的面向对象分析与设计涉及到抽象.思考和经验的话,那么嵌入式系统的实现则涉及更多的实施细节.无论使用咋样前言的技术方法,最终都需要把整个系统 ...
最新文章
- windows 常用命令
- Java项目:基于SSM实现房屋租赁系统
- linux复盘:构架搭建lamp(安装)
- NIO源码解析:IntBuffer基本使用
- Django从理论到实战(part47)--ListView类
- SetConsoleCursorPosition光标的位置控制
- 数字逻辑基础与verilog设计_数字电路学习笔记(五):逻辑设计基础
- python高阶函数map_简单了解python高阶函数map/reduce
- 《Fast R-CNN》阅读笔记
- ffice 2016 文件运行excel的数据透视表中的数据切片器的时候自动关闭
- python 物联网服务器_python+树莓派实现IoT(物联网)数据上传到服务器
- 阻塞非阻塞、同步异步
- Introduction to Computer Networking学习笔记(十九):rate guarantees交换速度保证
- 路由器最高速度/性能测试 - Windows 安装 IPerf3 及 使用方法
- Java生成随机数的公式
- 手机怎样和宽带连接无线路由器设置路由器连接服务器,手机如何设置路由器?...
- 共享充电,是雪中送炭还是暗藏危险?——恶意充电宝实验
- 零基础语法入门第四讲 代词的主格和宾格
- 网络图像的文本识别(阿里天池竞赛)
- springboot集成
热门文章
- 中国39所985高校省级行政区分布-web数据可视化(d3.pack包含关系图)
- 基于Unique ID的单片机程序加密系统 单片机唯一ID程序加密
- java bat运行jar文件_利用.bat文件运行jar文件
- linux下nmon的安装及使用教程
- 配置华为防火墙ssh ASDM
- 产品能力提升|《金字塔原理》
- 用IDEA进行git版本控制
- 微信小程序图片显示不出来的解决方案
- Mysql数据库死锁实战-Jmeter连接配置数据库[Mysql]
- 沈阳大学专升本计算机宿舍,沈阳大学宿舍怎么样 住宿条件好不好