【嵌入式系统开发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-5GPIOB-9GPIOC-14 这3个引脚上控制LED灯(最高时钟2Mhz),轮流闪烁,间隔时长1秒。
1)写出程序设计思路,包括GPIOx端口的各寄存器地址和详细参数;
2)用C语言寄存器方式编程实现。

2.硬件需求

多根杜邦线、红绿黄LED灯、面包板、STM32F103C8T6、CH340 USB转TTL,ST-LINK
【嵌入式系统开发08】STM32F103C8T6搭建电路实现流水灯详解_第1张图片


(二)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系列支持包。
【嵌入式系统开发08】STM32F103C8T6搭建电路实现流水灯详解_第2张图片

2.S-TLINK检查

● 首先将S-TLINK插入电脑的一个端口。
【嵌入式系统开发08】STM32F103C8T6搭建电路实现流水灯详解_第3张图片
● 打开设备管理器,检查S-TLIN驱动设备是否安装好。
【嵌入式系统开发08】STM32F103C8T6搭建电路实现流水灯详解_第4张图片
可以看见,此图标没有带感叹号,所以已安装好。

3.新建工程文件

● 建立LED文件,放在相应的目录下,文件名命名为light
【嵌入式系统开发08】STM32F103C8T6搭建电路实现流水灯详解_第5张图片
【嵌入式系统开发08】STM32F103C8T6搭建电路实现流水灯详解_第6张图片
● 本次点灯操作采用STM32F103C8T6芯片,所以选择芯片为STM32F103C8
【嵌入式系统开发08】STM32F103C8T6搭建电路实现流水灯详解_第7张图片
【嵌入式系统开发08】STM32F103C8T6搭建电路实现流水灯详解_第8张图片
环境搭建好后,进行编程。


(五)代码编写及编译调试

1.编写.c文件

● 首先在工程中添加.c文件,在Target1-Source group1,右键-Add New Item…,在弹出的窗口中选中.c文件,填写文件名保存,到此完成.c文件的添加。
【嵌入式系统开发08】STM32F103C8T6搭建电路实现流水灯详解_第9张图片
● 这里将.c文件命名为led文件。
【嵌入式系统开发08】STM32F103C8T6搭建电路实现流水灯详解_第10张图片
● 再写入代码,注意项目结构,使用的引脚是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 输出高
}

【嵌入式系统开发08】STM32F103C8T6搭建电路实现流水灯详解_第11张图片

2.编写.h文件

.h是C语言和C++语言的头文件。
● 一般在类的头文件里面只放入函数声明,宏定义,函数原型,而具体的实现在文件里面。
● 在编译的时候,编译器会自动加载和.h匹配的.cpp文件。
【嵌入式系统开发08】STM32F103C8T6搭建电路实现流水灯详解_第12张图片
● 输入头文件函数相应的代码。

#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

【嵌入式系统开发08】STM32F103C8T6搭建电路实现流水灯详解_第13张图片

3.main主函数编写

【嵌入式系统开发08】STM32F103C8T6搭建电路实现流水灯详解_第14张图片

#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);
	} 
}

【嵌入式系统开发08】STM32F103C8T6搭建电路实现流水灯详解_第15张图片

4.启动文件加入

● 此时我们的代码还不能运行,因为还没有将启动文件引入。
【嵌入式系统开发08】STM32F103C8T6搭建电路实现流水灯详解_第16张图片
● 选择后缀名为md.s的文件。
【嵌入式系统开发08】STM32F103C8T6搭建电路实现流水灯详解_第17张图片
● 此时发现还不行,还需要加入外设寄存器描述文件,还有两个system文件来配置时钟。
【嵌入式系统开发08】STM32F103C8T6搭建电路实现流水灯详解_第18张图片
● 再将system的文件引入,主函数得以运行。


(六)虚拟逻辑分析仪仿真观察

1.前置设备

● 首先打开魔法棒,进行修改参数。
在这里插入图片描述
● 修改一下相应参数。
【嵌入式系统开发08】STM32F103C8T6搭建电路实现流水灯详解_第19张图片
【嵌入式系统开发08】STM32F103C8T6搭建电路实现流水灯详解_第20张图片
● 记得打开Keil自带的仿真模拟器。
【嵌入式系统开发08】STM32F103C8T6搭建电路实现流水灯详解_第21张图片

2.进入DEBUG观察

● 点击Setup进行修改相应参数。
【嵌入式系统开发08】STM32F103C8T6搭建电路实现流水灯详解_第22张图片
【嵌入式系统开发08】STM32F103C8T6搭建电路实现流水灯详解_第23张图片
● 点击运行
【嵌入式系统开发08】STM32F103C8T6搭建电路实现流水灯详解_第24张图片
※ 最终实现如下


(七)硬件实现

1.搭建电路

●将硬件进行搭建,为GPIOA-5、GPIOB-9、GPIOC-14 这3个引脚上控制LED灯(最高时钟2Mhz),轮流闪烁,间隔时长1秒,得到最终电路连接如下。

2.下载烧录软件

● FlyMcu仿真软件下载与安装,将压缩文件解压即可直接使用。
在这里插入图片描述
【嵌入式系统开发08】STM32F103C8T6搭建电路实现流水灯详解_第25张图片

3.HEX文件烧录实现

【嵌入式系统开发08】STM32F103C8T6搭建电路实现流水灯详解_第26张图片


(八)总结

本文目的是主要介绍通过STM32F103C8T6+面板板+3只红绿蓝LED,搭建了电路,实现流水灯,同时写出程序设计思路,用C语言寄存器方式编程实现,嵌入式开发本是博主短板,但功不唐去捐终入海。
寄语:好累
   这次没有什么鸡汤了
   只需好好休息便好!

【嵌入式系统开发08】STM32F103C8T6搭建电路实现流水灯详解_第27张图片

(九)参考文献

[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

你可能感兴趣的:(stm32,单片机,arm)