嵌入式-Stm32-江科大基于寄存器点亮LED灯

news2025/1/12 13:30:53

文章目录

    • 前言:
    • 一:搭建基于寄存器控制LED的工程
    • 二:用江科大的STM32板子实现基于寄存器点亮LED灯
    • 三:用非江科大stm32板子实现基于寄存器点亮LED灯
      • 道友:一星陨落,黯淡不了星空灿烂;一花凋零,荒芜不了整个春天。

当前stm32的开发方式主要有:
①基于寄存器:最底层,最直接,效率更高,结构复杂,寄存器太多,不太推荐。
②基于标准库(库函数):使用ST官方提供的封装好的函数,通过调用函数来间接地配置寄存器,江科大课程主打基于库函数开发。封装好的函数都在STM32F103x标准外设库(固件库)
③基于HAL库:用图形化界面快速配置STM32,适合快速上手,但隐藏了底层逻辑。

推荐文章
1.《嵌入式-stm32-hal库通过GPIO点LED灯》
2.《嵌入式-stm32-江科大基于标准库通过GPIO点LED灯》

前言:

0.1 原理图
在这里插入图片描述
0.1 STLINK烧录方式

在这里插入图片描述0.2 Keil5内设置STlink烧录方式
在这里插入图片描述
0.3 复位按键reset和run
在这里插入图片描述

一:搭建基于寄存器控制LED的工程

1.1 从0到最终代码截图预览在这里插入图片描述
1.2 从零开始搭建 项目(一步一步)

先newproject,再选芯片ARM→STM32F103C8。

芯片选型
1.3 从stm32固件库复制来的文件

下面主要工作是创建文件夹来存放从固件库复制来的各种文件,第一次比较麻烦,但后续自己开发一般都是复制黏贴上一份项目的文件

项目建好之后,默认就是这个文件夹
在这里插入图片描述

手动在KEIL5内添加文件组

在这里插入图片描述
1.4 文件夹组成

工程文件夹里手动创建Start、User 文件夹,复制固件库里面的部分文件到工程文件夹

①Start部分1:启动文件,位于固件库文件夹.\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm”。**STM32的程序从启动文件执行。**启动文件选择只需根据下表选择其中一个.s文件

②Start部分2:位于固件库目录“.\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x”的三个文件。"stm32f10x.h"描述STM32外设寄存器 及其对应的地址 ,作用相当于51单片机中的头文件“REG52.h”。“system_stm32f10x.h”、"system_stm32f10x.c"主要用于配置时钟,比如配置STM32的主频为72MHz。

③Start部分3:位于固件库目录“.\Libraries\CMSIS\CM3\CoreSupport”的两个文件。“core_cm3.h”和“core_cm3.c”是内核寄存器的描述文件,并且还带了一些内核的配置函数。

④User文件夹:存放用户编写的main.c等文件。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
1.5 工程里对应建立Start、User等同名称的分组,然后将文件夹内的文件添加到工程分组里。
带了小钥匙的代表是只读文件,不能修改

下一步是需要有在工程选项里添加这个文件夹的头文件路径,要不然软件是找不到.h文件的

Strart分组:注意启动文件的选择,只需根据下表选择其中一个.s文件。

在这里插入图片描述

User分组:注意添加main.c文件时,路径要选上User文件夹,否则默认路径在文件外。下面给出main.c文件中的代码:

#include "stm32f10x.h"                  // Device header
int main(void){
 while(1){
 }
}
//注意最后一行必须是空着

1.6 工程选项,C/C++.Include Paths内声明所有包含头文件的文件夹,否则软件找不到.h文件。 点击魔术棒按钮→C/C++→Include Path →右侧的三个点按钮,添加对应的文件夹即可

在这里插入图片描述

必须要添加这个头文件,相当于这个是51单片机的“reg52.h”

在这里插入图片描述

二:用江科大的STM32板子实现基于寄存器点亮LED灯

Cortex-M3 →系统总线 →AHB总线 → 桥接2 →GPIOC→PC13

#include "stm32f10x.h"                  // Device header

int main(void){
  //配置RCC寄存器,使能GPIOC的时钟。GPIO都属于APB2外设
  RCC->APB2ENR = 0x00000010;
  //配置寄存器PC13:通用推挽输出模式、输出模式50MHz
  GPIOC->CRH = 0x00300000;
  //输出数据寄存器PC13:
  GPIOC->ODR = 0x00002000;//LED灭
//  GPIOC->ODR = 0x00000000;//LED亮
  while(1){}
}


在这里插入图片描述

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

GPIO都是APB2的外设 第一: //配置RCC寄存器,使能GPIOC的时钟。GPIO都属于APB2外设 RCC->APB2ENR= 0x00000010;

在这里插入图片描述

第二: //配置寄存器PC13:通用推挽输出模式、输出模式50MHz GPIOC->CRH = 0x00300000;

因为这里是PC13端口,0-7是低位寄存器,8-15位是高寄存器,所以用来配置高寄存器

在这里插入图片描述

二进制和16进制的转换,4位换1位

在这里插入图片描述

三:用非江科大stm32板子实现基于寄存器点亮LED灯

3.1 复制前面项目,只修改main.c内代码

#include "stm32f10x.h"

int main(void)
{
	while(1)
	{
//	//配置RCC寄存器,使能GPIOC的时钟。GPIO都属于APB2外设
//		RCC->APB2ENR = 0x00000010;
//	//配置寄存器PC13:通用推挽输出模式、输出模式50MHZ
//	GPIOC->CRH = 0x00300000;
//	//输出数据寄存器PC13:
//	GPIOC->ODR = 0x00000000;//led亮
		
		
		
	//配置RCC寄存器,使能GPIOB的时钟。GPIO都属于APB2外设
		RCC->APB2ENR = 0x00000008;
	//配置寄存器PB8:通用推挽输出模式、输出模式50MHZ
	GPIOB->CRH = 0x00000003;
	
	//输出数据寄存器PB8 :
	GPIOB->ODR = 0x00000100;//led灭
	GPIOB->ODR = 0x00000000;//led亮
		while(1){}
	
	}
}

3.2 根据自己板子的原理图点灯

Cortex-M3 →系统总线 →AHB总线 → 桥接2 →GPIOB→PB8→LED1

选用PB8控制LED1

在这里插入图片描述

3.3 看数据手册

配置RCC(APB2外设时钟使能寄存器)→GPIO端口配置高寄存器→GPIO端口输出数据寄存器

图3.31 RCC->APB2ENR = 0x00000008;

配置RCC(APB2外设时钟使能寄存器),GPIO是由APB2控制的,IOPB就是控制B组,置1,其余都是0

图3.32 GPIOB->CRH = 0x00000003;

GPIO端口配置高寄存器,0-7 是低位,8-15是高位,我们要控制PB8,8是高位

图3.33GPIOB->ODR = 0x00000100;//led灭

GPIO端口输出数据寄存器,图二控制GPIO的B组,图三控制GPIO的B组的8引脚

以上就是STM32基于寄存器开发的方式,简单了解就行。

参考博主:虎慕
推荐文章
1.《嵌入式-stm32-hal库通过GPIO点LED灯》
2.《嵌入式-stm32-江科大基于标准库通过GPIO点LED灯》

道友:一星陨落,黯淡不了星空灿烂;一花凋零,荒芜不了整个春天。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1373113.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

脚本编程游戏引擎会遇到哪些问题

在游戏开发中,脚本编程已经成为了一种非常常见的方式,用来实现游戏逻辑和功能。但是脚本编程游戏引擎也可能会面临一些挑战和问题。下面简单的探讨一下都会遇到哪些问题,并且该如果做。 性能问题 脚本语言通常需要运行时解释执行&#xff0…

3.4 在开发中使用设计模式

现在,我们应该对设计模式的本质以及它们的组织方式有了初步的认识,并且能够理解ROPES过程在整体设计中的作用。通过之前章节对“体系结构”及其五个视图的探讨,我们打下了坚实的基础。初步了解了UML的基本构建模块后,我们现在可以…

计算机二级WPS Office考试须知、如何备考、备考建议

本文从计算机二级考试须知、如何备考、备考建议以及考试的注意事项等方面进行讲述,认认真真看,对你受益匪浅。 一、计算机二级考试须知 2021年3月27日至29日将举办第60次全国计算机等级考试(NCRE),从今年起&#xff0…

python json模块

json是JavaScript对象表示法的缩写,是一种轻量级的数据交换格式,经常被用于Web应用程序中。python中的json库是用于解析和生成json数据格式的库。 import jsondata {"name": "张三","age": 18,"hobbies": [&q…

Gitlab-ci:从零开始的前端自动化部署

一.概念介绍 1.1 gitlab-ci && 自动化部署工具的运行机制 以gitlab-ci为例: (1) 通过在项目根目录下配置.gitlab-ci.yml文件,可以控制ci流程的不同阶段,例如install/检查/编译/部署服务器。gitlab平台会扫描.gitlab-ci.yml文件&…

遥感单通道图像保存为彩色图像

系列文章目录 第一章PIL单通道图像处理 文章目录 系列文章目录前言一、代码实现二、问题记录在这里插入图片描述 总结 前言 将单通道图像以彩色图像的形式进行保存主要使用了PIL库 一、代码实现 palette_data [***]:可以进行自定义设置 代码如下: fr…

字体图标操作步骤

网站 直接点击 进去后长这样,点免费的添加 保存下载 保存后解压 把fonts文件夹复制粘贴到我们自己项目 可以放在同images的路径下 引入 来源于 再style中粘贴 font-face {font-family: icomoon;src: url(fonts/icomoon.eot?jyg4cp);src: url(fonts/icomoo…

UVa12304 2D Geometry 110 in 1!

题目链接 UVa12304 2D Geometry 110 in 1! 题意 这是一个拥有6(二进制是110)个子问题的2D几何问题集。 1 CircumscribedCircle x1 y1 x2 y2 x3 y3:求三角形(x1,y1)-(x2,y2)-(x3,y3)的外接圆。这3点保证不共线。答案应格式化成(x,y,r…

C++从零基础到入门(1)

目录 一、输入输出 (iostream库) 1.标准输出流cout 2.标准输入流cin 3.标准库iostream (1)iostream中的窄字符(char) (2)iostream中的 宽字符(wchar_t) 二、变量与数据类型 …

Map与JSONObject区别

相同点: 都可以存key-value;key是唯一的,如果key重复了会覆盖前面的 不同点: (1)JSONObject 不可以存空,Map可以存空。 (2)Map由jdk提供,JsonObject需要第三方jar包提供。…

搜索与图论第一期 DFS(深度优先搜索)

前言 DFS这部分难度不大,大家应该完全掌握!!! 一、DFS的基本内容 内容: 深度优先遍历图的方法是,从图中某顶点v出发: (1)访问顶点v; (2&#…

使用Linux防火墙管理HTTP流量

在Linux系统中,防火墙是用于控制网络流量的重要工具。通过防火墙,你可以根据需要限制、过滤或允许特定的网络流量,从而提高系统的安全性。在处理HTTP流量时,防火墙可以帮助你实施访问控制、流量监控和其他安全策略。 iptables i…

【NVIDIA】Jetson Orin Nano系列:烧写Ubuntu22.04

1、简介 最新的sdk-manager已经可以安装到Ubuntu22.0,也支持在 Jetson Orin Nano 上烧写Ubuntu22.04。 官网介绍:https://developer.nvidia.com/sdk-manager 2、版本介绍 JetPack版本:https://developer.nvidia.com/embedded/jetpack-ar…

Camunda Event Based Gateway

一:bpmn 二:java 如果没有收到信号,超过等待时间,流程进入总经理审批,如果在等待时间内收到信号,流程进入副总经理审批。 示例1:发送信号事件,流程进入副总经理审批。 repository…

vue element-ui的table列表中展示缩略图片效果实例

这篇文章主要给大家介绍了关于vue element-ui的table列表中展示多张图片(可放大)效果的相关资料,文中通过代码示例介绍的非常详细,需要的朋友可以参考下 一、效果图 二、代码部分 1、原理 使用 <el-table-column> 和 <el-image> 组件来在表格中插入缩略图 2、te…

学习笔记之——3D Gaussian Splatting源码解读

之前博客对3DGS进行了学习与调研 学习笔记之——3D Gaussian Splatting及其在SLAM与自动驾驶上的应用调研-CSDN博客文章浏览阅读450次。论文主页3D Gaussian Splatting是最近NeRF方面的突破性工作&#xff0c;它的特点在于重建质量高的情况下还能接入传统光栅化&#xff0c;优…

CMU15-445-Spring-2023-Project #2 - B+Tree

前置知识&#xff1a;参考上一篇博文 CMU15-445-Spring-2023-Project #2 - 前置知识&#xff08;lec07-010&#xff09; CHECKPOINT #1 Task #1 - BTree Pages 实现三个page class来存储B树的数据。 BTree Page internal page和leaf page继承的基类&#xff0c;只包含两个…

人工智能:未来智慧城市建设的“智慧大脑”与核心价值

目录 一、引言 二、人工智能在智慧城市中的应用实例 三、人工智能对智慧城市建设的核心价值 四、面临的挑战与未来展望 五、结语 六、附&#xff1a;智慧城市全套解决方案大合集 - 下载 一、引言 随着科技的飞速发展&#xff0c;智慧城市的概念逐渐深入人心。智慧城市利…

爬虫你需要知道的:什么是http请求

1. 什么是http请求 我们将通过发送http请求来获取网页内容。http是HyperText Transfer Protocol的缩写&#xff0c;意思是超文本传输协议&#xff0c;它是一种客户端和服务器之间的请求响应协议。 浏览器就可以看作是一个客户端&#xff0c;当我们在浏览器地址栏输入想访问的…

uniapp在web端怎么使用svg图标呢

在图标库中添加好项目用到的图标&#xff0c;点击symbol点击生成在线链接 点击生成的在线链接&#xff0c;此时会跳转到一个新窗口&#xff0c;是一个js文件 复制这个js文件的内容 然后在uniapp中新建svg.js文件&#xff0c;把从上面复制的代码粘贴到这个svg.js中 在main.js中引…