stm32开发(一)之创建工程与第一个程序

news2025/4/13 14:30:08

ps:

开发模式

1.基于库函数(标准库)  推荐

2.基于HAL库  图形化

3.基于寄存器 最直接

一、创建工程 

1、打开keil5

new Project->路径->命名->保存

2、选择型号:stm32f103c8

初始创建工程我们不使用快捷项目建设

3、准备

在项目目录处创建User和Start

对start目录

配置路径

结果展示

直到这一步我们只是解决基于寄存器开发

(一)GPIO(General Purpose Input Output)通用输入输出口    共有八种工作模式

1、作用

输出控制:设高低电平,控外设(如 LED、继电器、电机等)开关。

输入采集:当输入引脚,采外设状态(如按钮、传感器信号)。

通信扩展:模拟 I2C、SPI 等协议,与设备数据交互。

逻辑构建:组合引脚

2、连接:挂载在APB2外设总线上

分为GPIOA-GPIOAE

每个GPIO均有16个引脚,分别为PX0-PX15

同时连接方式:

PX0-PX15(共16位) -> 驱动程序(驱动增强) -> 寄存器(共32位,所以只用到低16位) -> APB2

GPIO组成:驱动程序和寄存器

3、输入模式

上拉输入模式:保持高电平

下拉输入模式:保持低电平

浮空模式:高低电平浮动,无法确定

模拟输入模式(ADC):连续。模拟信号

TTL施密特触发器:将模拟信号转换为数字信号

复用功能输入:数字信号

输入数据寄存器:存储

4、输出模式

位设置/清除寄存器:操作某一位的引脚高低电平。写入

输出数据寄存器:读/写

输出控制:上为P-MOS连接VDD(高电平),下接N-MOS连接VSS(低电平)。存在三种模式:

(1)推挽输出模式

若寄存器为1时,连接P-MOS,输出VDD高电平;

若寄存器为0时,连接N-MOS,输出VSS低电平;

此时写入数据对引脚具有绝对控制!

(2)开漏模式模式:P-MOS管无效,只有N-MOS作用。作为通信协议的驱动模式(I2C)

只有低电平具有驱动作用。

若寄存器为1时,N-MOS断开,成高阻态;

若寄存器为0时,连接N-MOS,输出VSS低电平;

(3)关闭模式:上下均关闭,由外部信号控制

片上外设:控制下述两类模式,只为其提供电平输入,其余作用同上。

复用开漏模式

复用推挽模式

5、分类

端口配置寄存器(共两个64位):每一个引脚端口需要4位控制,所以需要4*16=64

端口配置高寄存器:GPIOx_CRH,x为A-E

端口配置低寄存器:GPIOx_CRL,x为A-E

端口输入寄存器(GPIOx_IDR,x为A-E):高十六位不使用,低十六位对应16个引脚

端口输出寄存器(GPIOx_ODR,x为A-E):高十六位不使用,低十六位对应16个引脚

端口位设置/清除寄存器(GPIOx_BSRR,x为A-E):

高十六位对应清除功能,低十六位对应位设置功能;

写1标识清除或者设置,0标识不影响

端口位清除寄存器(GPIOx_BRR,x为A-E):低十六位作用同上对应清除功能

端口配置锁定寄存器(GPIOx_LCKR,x为A-E):对操作端口信号进行锁定

(二)其他外设

LED:长脚为正,短脚为负

有源蜂鸣器:自带震荡源,接上正负极即可正常工作

三级管:基集、发射集、集电极;前者电位相异则集电极通电导通

(PNP三级管,如右上图;NPN三极管为右下图)

面包板:横向导通和竖向导通

基本流程:电源->跳线->电阻->LED->跳线->电源

三、LED点亮

1、new Project

2、命名保存

3、型号:stm32f103C8

4、直接叉掉

5、在工程文件夹创建三个文件夹:User、Start、Library

5.1 对Start文件夹:

5.2 对Library:

由两部分组成

5.3 对User:

6、在keil中,添加文件

6.1 添加Group

6.2 添加文件

对Start:

效果图

对Libarary:

效果图

对User:

效果图

最后一定点击OK

将导入的main.c清空

7、配置路径

效果图

7、配置宏:USE_STDPERIPH_DRIVER

8、初始main.c

#include "stm32f10x.h"                  // Device header
int main(){
	while(1){
	
	}
}

9、配置仿真 ST-Link

10、编译结果

11、小工具:删除编译产生的中间文件,缩小空间便于传递压缩包

keilkill.bat文件(缺图一张)

3.31

12、代码编写

(1)RCC外设库函数

常用函数

RCC/AHB外设时钟控制

RCC/APB1外设时钟控制

RCC/APB1外设时钟控制

void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);

(2)GPIO库函数

此步骤包含选择GPIO工作模式、执行速度、控制端口(推挽输出模式、50MHz、pin0)

(3)GPIO库函数操作控制位

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//1
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//0
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

完整函数

#include "stm32f10x.h" // Device header
//目的:点亮PA0的LED

//步骤:
/*
1、RCC启用GPIOA时钟
2、初始化GPIOA
3、使用函数控制GPIOx位
*/

int main(){
	//创建初始化对象
	GPIO_InitTypeDef myGPIOA;
	myGPIOA.GPIO_Pin = GPIO_Pin_0;
	myGPIOA.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
	myGPIOA.GPIO_Speed = GPIO_Speed_50MHz;
	
	//1、RCC开启始终
	//RCC_APB2PeriphClockCmd接受两个参数
	//第一个参数表明操作谁的时钟
	//第二个参数表明使能或者禁止
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	
	//2、初始化GPIO
	//两个参数 第一个标识操作哪个外设GPIOx
	GPIO_Init(GPIOA,&myGPIOA);
	
	//3、外设函数操作
	//GPIO_ResetBits(GPIOA,GPIO_Pin_0);//0 亮
	//GPIO_SetBits(GPIOA,GPIO_Pin_0);//1
	//GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);//0
	//GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);//1
	GPIO_Write(GPIOA,Bit_RESET);
	while(1){
	
	}
}

推挽输出:高低电平均可以

开漏输出:仅低电平

四、LED流水线

代码

#include "stm32f10x.h" // Device header
#include "Delay.h"

//步骤:
/*
1、RCC启用GPIOA时钟
2、初始化GPIOA
3、使用函数控制GPIOx位
*/

int main(){
	//创建初始化对象
	GPIO_InitTypeDef myGPIOA;
	myGPIOA.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
	myGPIOA.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
	myGPIOA.GPIO_Speed = GPIO_Speed_50MHz;
	
	//1、RCC开启始终
	//RCC_APB2PeriphClockCmd接受两个参数
	//第一个参数表明操作谁的时钟
	//第二个参数表明使能或者禁止
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	
	//2、初始化GPIO
	//两个参数 第一个标识操作哪个外设GPIOx
	GPIO_Init(GPIOA,&myGPIOA);
	
	//3、外设函数操作
	
	while(1){
		GPIO_Write(GPIOA,~0x0001);//0000 0000 0000 0001  低电平有效此时
		Delay_s(1);
		GPIO_Write(GPIOA,~0x0002);//0000 0000 0000 0010  低电平有效此时
		Delay_s(1);
	}
}

五、蜂鸣器

代码

#include "stm32f10x.h" // Device header
#include "Delay.h"
//目的:蜂鸣器B10
//步骤:
/*
1、RCC启用GPIOX时钟
2、初始化GPIOX
3、使用函数控制GPIOx位
*/

int main(){
	//创建初始化对象
	GPIO_InitTypeDef myGPIOB;
	myGPIOB.GPIO_Pin = GPIO_Pin_10;
	myGPIOB.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
	myGPIOB.GPIO_Speed = GPIO_Speed_50MHz;
	
	//1、RCC开启始终
	//RCC_APB2PeriphClockCmd接受两个参数
	//第一个参数表明操作谁的时钟
	//第二个参数表明使能或者禁止
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	
	//2、初始化GPIO
	//两个参数 第一个标识操作哪个外设GPIOx
	GPIO_Init(GPIOB,&myGPIOB);
	
	//3、外设函数操作
	
	while(1){
		GPIO_ResetBits(GPIOB,GPIO_Pin_10);
		Delay_ms(1000);
		GPIO_SetBits(GPIOB,GPIO_Pin_10);
		Delay_ms(3000);
		GPIO_ResetBits(GPIOB,GPIO_Pin_10);
		Delay_ms(100);
	}
}

至此基本结束!

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

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

相关文章

【电商】基于LangChain框架将多模态大模型连接数据库实现精准识别

1. LangChain框架 LangChain是一个用于构建基于大语言模型的应用框架,通过模块化设计简化了LLM与外部工具,数据源和复杂逻辑的集成。 连接能力 将多个LLM调用,工具调用或者数据处理步骤串联成工作流 数据感知 外部数据集成 支持连接数据…

鸿蒙HarmonyOS埋点SDK,ClkLog适配鸿蒙埋点分析

ClkLog埋点分析系统,是一种全新的、开源的洞察方案,它能够帮助您捕捉每一个关键数据点,确保您的决策基于最准确的用户行为分析。技术人员可快速搭建私有的分析系统。 ClkLog鸿蒙埋点SDK通过手动埋点的方式实现HarmonyOS 原生应用的前端数据采…

湘西的未来交响曲

故事摘要 在中国湖南湘西的未来,苗族文化与高科技完美融合,构建出一个既传统又现代的世界。晨曦中的沱江,悬浮的吊脚楼面带着品位独特的织锦纹样,展示了令人惊叹的未来建筑美学。独特的工坊技术使得每件首饰都能感知佩戴者的情感&…

STM32_HAL库提高中断执行效率

目录 中断流程分析我的解决办法优缺点 大家都在说STM32 HAL 库中断效率低下。具体哪里不行?如何优化? 我手里的项目要用到多个定时器TIM6、TIM7、TIM9、TIM10、TIM11、TIM12、TIM13,在处理这些定时器中断的时候,也发现了这个问题。…

软件系统安全设计方案,信息化安全建设方案(Word原件)

1.1 总体设计 1.1.1 设计原则 1.2 物理层安全 1.2.1 机房建设安全 1.2.2 电气安全特性 1.2.3 设备安全 1.2.4 介质安全措施 1.3 网络层安全 1.3.1 网络结构安全 1.3.2 划分子网络 1.3.3 异常流量管理 1.3.4 网络安全审计 1.3.5 网络访问控制 1.3.6 完…

什么是微前端?有什么好处?有哪一些方案?

微前端(Micro Frontends) 微前端是一种架构理念,借鉴了微服务的思想,将一个大型的前端应用拆分为多个独立、自治的子应用,每个子应用可以由不同团队、使用不同技术栈独立开发和部署,最终聚合为一个整体产品…

Web前端之Vue+Element实现表格动态不同列合并多行、localeCompare、forEach、table、push、sort、Map

MENU 效果图公共数据数据未排序时&#xff08;需要合并的行数据未处于相邻位置&#xff09;固定合并行&#xff08;写死&#xff09;动态合并行方法&#xff08;函数&#xff09;执行 效果图 公共数据 Html <el-table :data"tableData" :span-method"chang…

【教学类-102-07】剪纸图案全套代码07——Python点状虚线优化版本+制作1图2图6图

背景需求: 我觉得这个代码里面的输入信息分离太远(42行和241行),想重新优化一下 【教学类-102-05】蛋糕剪纸图案(留白边、沿线剪)04——Python白色(255)图片转为透明png再制作“点状边框和虚线边框”-CSDN博客文章浏览阅读864次,点赞14次,收藏27次。【教学类-102-0…

QT中怎么隐藏或显示最大化、最小化、关闭按钮

文章目录 方法一&#xff1a;通过代码动态设置1、隐藏最大化按钮2、隐藏最小化按钮3、隐藏关闭按钮方法 1&#xff1a;移除 WindowCloseButtonHint方法 2&#xff1a;使用 Qt::CustomizeWindowHint 并手动控制按钮 4、同时隐藏最大化和最小化按钮5、同时隐藏最大化和关闭按钮6、…

KTH5772 系列游戏手柄摇杆专用3D 霍尔位置传感器

产品概述 KTH5772是一款专为游戏手柄上的摇杆应用而设计的3D霍尔磁感应芯片&#xff0c;主要面向对线性度、回报率、灵敏度、功耗要求严格的摇杆应用。KTH5772基于3D霍尔技术&#xff0c;内部分别集成了X轴、Y轴和Z轴三个独立的霍尔元件&#xff0c;能够通过测量和处理磁通密度…

Soybean Admin 使用tv-focusable兼容电视TV端支持遥控器移动焦点

环境 window10 pnpm 8.15.4 node 8.15.4 vite 5.1.4 soybean admin: 1.0.0 native-ui: 2.38.0 vue-tv-focusable: 2.0.1 小米电视 MIUI TV版本&#xff1a;MiTV OS 2.7.1886(稳定版) 飞视浏览器&#xff1a;https://www.fenxm.com/1220.html这里必须使用飞视浏览器&#xff0c…

大模型学习七:‌小米8闲置,直接安装ubuntu,并安装VNC远程连接手机,使劲造

一、说明 对于咱们技术人来说&#xff0c;就没有闲的蛋疼的时候&#xff0c;那不是现在机会来了 二、刷机器准备 1、申请解锁手机 申请解锁小米手机https://www.miui.com/unlock/download.html 下载工具&#xff0c;安装下面的步骤来&#xff0c;官网不欺人吧 打开开发者工…

高可用之战:Redis Sentinal(哨兵模式)

参考&#xff1a;Redis系列24&#xff1a;Redis使用规范 - Hello-Brand - 博客园 1 背景 在我们的《Redis高可用之战&#xff1a;主从架构》篇章中&#xff0c;介绍了Redis的主从架构模式&#xff0c;可以有效的提升Redis服务的可用性&#xff0c;减少甚至避免Redis服务发生完…

CSS Grid布局:从入门到放弃再到真香

Flexbox 与 Grid 布局&#xff1a;基础概念与特点 Flexbox Flexbox&#xff08;Flexible Box Layout&#xff09;&#xff0c;即弹性盒布局模型&#xff0c;主要用于创建一维布局&#xff0c;能够轻松实现元素在一行或一列中的排列、对齐与分布。通过display: flex属性启用 Fl…

Springboot把外部jar包打包进最终的jar包,并实现上传服务器

1、创建lib目录&#xff0c;把jar包放进这个目录下&#xff0c;然后标记lib目录为“资源根路径”&#xff08;鼠标右键lib目录->将目录标记为->资源根路径。之后lib文件夹会有如下的图标变化&#xff09; 文件结构如下&#xff1a; 2、pom文件添加依赖 <dependency…

仿照管理系统布局配置

1.vue仿照snowy 配置&#xff0c;如下图&#xff1a; 2.代码实现 <template><div class"theme-settings"><!-- 导航栏 --><div class"nav-bar"><el-breadcrumb separator"/"><el-breadcrumb-item>导航设置…

GPT - 因果掩码(Causal Mask)

本节代码定义了一个函数 causal_mask&#xff0c;用于生成因果掩码&#xff08;Causal Mask&#xff09;。因果掩码通常用于自注意力机制中&#xff0c;以确保模型在解码时只能看到当前及之前的位置&#xff0c;而不能看到未来的信息。这种掩码在自然语言处理任务&#xff08;如…

适合工程建筑行业的OA系统有什么推荐?

工程行业具有项目周期长、协作链条复杂等特性&#xff0c;传统管理模式下的 “人治”“纸质化” 弊端日益凸显。OA 系统作为数字化管理的核心载体&#xff0c;通过流程标准化、数据可视化&#xff0c;精准解决工程行业项目管理核心痛点。 泛微 e-office 深度聚焦工程场景&#…

深入解析栈回溯技术:如何通过异常处理精准定位程序崩溃点

一、栈回溯 1.1 栈回溯的原理 调试程序时&#xff0c;经常发生这类错误&#xff1a; 1.读写某个地址&#xff0c;导致程序崩溃 2.调用某个空函数&#xff0c;导致程序崩溃在异常处理函数中&#xff0c;可以打印出”发生错误瞬间”的所有寄存器。 我们调试时&#xff0c;可以…

重构居家养老安全网:从 “被动响应” 到 “主动守护”

随着全球老龄化加剧&#xff0c;居家养老安全成为社会关注的核心议题。 传统养老模式依赖人工巡检或单一传感器&#xff0c;存在响应滞后、隐私泄露、场景覆盖不足等问题。 由此智绅科技应运而生&#xff0c;七彩喜智慧养老系统构筑居家养老安全网。 而物联网&#xff08;Io…