STM32F103的流水灯点亮版本1(寄存器操作)

一、Proteus设计一个STM32最小系统板+LED流水灯实验原理图+仿真

一、创建工程、绘制原理图 引脚原理图

在这里插入图片描述

电路原理图

在这里插入图片描述

二、选择keil里流水灯开发板的.hex文件,仿真

在这里插入图片描述
在这里插入图片描述

结果如下:

proteus

proteus

二、STM32F103C8T6下C语言寄存器方式实现led流水灯

一、设计思路

需要在STM32F103C8T6上面通过初始化GPIO来实现点亮LED灯。外设实现的功能可能是完全不同的,但是我们在设计程序的时候不需要考虑外设具体如何实现功能,只需要给外设接在哪里、高电平有效还是低电平有效。因此我们只需要找到GPIOA-5、GPIOB-9、GPIOC-14的地址,然后通过GPIO的初始化,控制寄存器将片IO口拉低拉高,输出高低电平,以控制LED灯灭。

stm32电灯:通过使能外设GPIO时钟,发出指令给外设GPIO,外设GPIO收到指令后,着手配置自己的寄存器,然后给IO口模式,让其实现各种功能。过程为:CPU给指令->GPIO收到指令->配置内部寄存器->配置IO口模式->控制LED灯亮灭。

STM简介

STM32,ST 是意法半导体,M 是 Microelectronics 的缩写,32 表示32 位,合起来理解STM32就是指 ST 公司开发的 32 位微控制器。
STM32 本质上来说是一个微控制器,自带了各种常用通信接口,比如 USART、I2C、SPI 等,可连接非常多的传感器,可以控制很多的设备。现实生活中,我们接触到的很多电器产品都有 STM32 的身影,比如智能手环,微型四轴飞行器,平衡车、移动 POST 机,智能电饭锅,3D 打印机等等。
STM32 有很多系列,可以满足市场的各种需求,从内核上分有 Cortex-M0、M3、M4和 M7 这几种,每个内核又大致分为主流、高性能和低功耗。
单纯从学习的角度出发,可以选择 F1和 F4,F1代表了基础型,基于 Cortex-M3内核,主频为 72MHZ,F4 代表了高性能,基于 Cortex-M4 内核,主频 180M。

STM32F103C8T6芯片介绍

在这里插入图片描述

二、GPIOx端口的各寄存器地址和详细参数 每组GPIO下面包含10个寄存器。也就是10个寄存器,一共可以控制一组GPIO的16个IO口。最多7组IO,也就是70个寄存器。

2.1寄存器分别如下

一个端口模式寄存器(GPIOx_MODER)

一个端口输出类型寄存器(GPIOx_OTYPER)

一个端口输出速度寄存器(GPIOx_OSPEEDR)

一个端口上拉下拉寄存器(GPIOx_PUPDR)

一个端口输入数据寄存器(GPIOx_IDR)

一个端口输出数据寄存器(GPIOx_ODR)

一个端口置位/复位寄存器(GPIOx_BSRR)

一个端口配置锁存寄存器(GPIOx_LCKR)

两个复用功能寄存器(低位GPIOx_AFRL& GPIOx_AFRH)

2.2寄存器地址

在这里插入图片描述

2.3时钟地址

在这里插入图片描述

2.4GPIO寄存器描述CRL与CRH CRL与CRH分别为端口配置低与端口配置高寄存器,为32位寄存器,其中每四位控制一个I/O口

在这里插入图片描述

对CNFy与MODEy(y=0,1,2…7)位写1或0控制I/O口的输入输出模式
在这里插入图片描述

STM32I/O口都是16位的,CRL与CRH分别控制低8位与高8位,两个寄存器的用法与功能完全一模一样.
例:将GPIOB9配置成推挽输出模式,且最大速度为2MHz
首先,其为GPIOB9端口,其属于端口配置高寄存器模块,则由图8.2.2可知,CNF9和MODE9位为0,其余位为F,即:GPIOB_CRH&=0xFFFFFF0F;又因其为推挽输出模式,且最大速度为2MHz,所以4位寄存器的配置就是CNF9【00】MODE9【10】,0010换成十进制数就是2,即:GPIOB_CRH|=0x00000020

2.5GPIO端口初始化设置及输入输出模式

第一步:使能GPIOx口的时钟
第二步:指明GPIOx口的哪一位,这一位的速度大小以及模式
第三步:调用GPIOx初始化函数进行初始化
第四步:调用GPIO-SetBits函数,进行相应位的置位

三、代码实现

新建文件,选择STM32F103C8,勾选CORE项,完成创建。要实现LED流水灯,还需要添加启动代码,以及.c文件。

在这里插入图片描述
在这里插入图片描述

C8T6使用的启动文件

startup_stm32f10x_md.s,

startup_stm32f10x_md.s 是一个启动文件,里面是使用汇编语言写好的基本程序,当 STM32 芯片上电启动的时候,首先会执行这里的汇编程序,从而建立起来C 语言的运行环境,所以我们把这个文件称为启动文件。C8T6 是中容量的arm芯片,启动文件的大致作用如下:

初始化堆栈指针 SP
初始化程序计数器指针 PC
设置堆、栈的大小
设置中断向量表的入口地址
配置外部 SRAM 作为数据存储器
调用 SystemInit() 函数配置 STM32 的系统时钟
设置 C 库的分支入口 "__main” (最终用来调用 main 函数)

添加启动文件到Source Group1里面,编写test2.c文件并且生成HEX文件。

ST-LINK/V2驱动安装(网上找资源安装)然后将STM32F103C8T6通过ST-LINK连接到电脑USB接口上。

ST-Link与C8T6之间通过杜邦线按照下图连接

在这里插入图片描述
在这里插入图片描述

结果如下

QQ视频20231004094452

四、总结

本次实验通过仿真点亮led流水灯和使用stm32f103c8t6核心板,通过电路实现led流水灯闪烁,对于我来说有点困难,但是查找资料也慢慢完成了。在此基础上,加深了我对GPIO寄存器的认识,希望之后不断学习可以慢慢提升自己的能力。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值