STM32 点灯实现 7.18

嵌入式:

以应用为中心,以专用计算机为基础,软硬件可裁剪

ARM

A系列芯片:高端芯片,实现人机互动
R系列:实现时效性
M系列:低端芯片,控制硬件设备,灯,风扇....

ROM\RAM

ROM(硬盘)
含有(flash、eeprom)
程序运行时,只读存储器
RAM(内存)
随机存储器

特殊功能寄存器:SFR(special functional register)

时钟

脉冲波(非常稳定,倍频,分频)
时钟源:产生时钟信号的东西
时钟是单片机的心脏
 1.寄存器:存高低存二进制数据--触发器--需要时钟信号才能工作
 2.定时器、计数器,需要时钟信号才能计数

STM32

全称:stm32F103C8T6

st:意法半导体

m:m系列

32:32位微控制器

F:芯片的子系列

103:增强功能系列

C:管脚48个

8:64byte flash容量

T:硬件封装系列

6:芯片的温度 35~80摄氏度

位运算:

<< >> & | ! ~ ^

清0和置1

点灯实现

时钟:一定的脉冲信号频率
作用:同意元器件的时效

时钟源:
HSI:内部高速时钟源 
LSI:内部低速时钟源
HSE:外部高速
LSE:外部低速

输入输出方式:(管脚和设备之间)
输出:
复用:是除GPIO以外使用到引脚
复用开漏
复用推挽
推挽输出:可以管脚和设备之间输出高低电平,引脚电平自由决定
开漏输出:输出的高低电平不具备驱动能力

输入:
上拉:引脚悬空时输入高电平,可以被外部拉低
浮空:接受数据的时候用,引脚电平完全由外部决定(当引脚悬空时,电平未知)
下拉:引脚悬空时输入低电平,可以被外部拉高
模拟输入:接收模拟信号

1.开时钟
APB2 外设时钟使能寄存器
基地址:0x4002 1000  偏移地址:0x18 [4] 1 打开GPIOC的时钟

2.输入输出模式
GPIOC 输入输出
基地址:0x4001 1000  偏移地址:0x04 [23:20] 0x1 通用推挽速度10MHZ

3.输出高低电平
端口输出寄存器
基地址:0x4001 1000  偏移地址:0x0c [13] 0

img

根据原理图PC13是低电平触发( ̄︶ ̄)↗ ,左边有个电源,右边是低电平

中断实现

中断的机制是打断而不是同时,单进程的情况
中断:

事件一执行中,事件二产生,打断事件一执行事件二,事件二处理完成,继续执行事件一
则,事件二就为中断

外部中断、串口中断、定时器中断

NVIC(中断优先级)每一次有中断都要对NVIC进行设置


1.NVIC中断优先级分组

	stm32有84个中断,包括 16个内核中断和68个可屏蔽中断,具有16级的可编程的中断优先级
	中断管理:
		寄存器AIRCR
		库函数NVIC_PriorityGroupConfig
NVIC_PriorityGroup 		先占优先级(抢占优先级)	从优先级(响应优先级)		描述

	
NVIC_PriorityGroup_0 		没有 						0-15 					先占优先级 0 位,从优先级 4 位
NVIC_PriorityGroup_1 		0-1 						0-7 					先占优先级 1 位,从优先级 3 位
NVIC_PriorityGroup_2 		0-3 						0-3 					先占优先级 2 位,从优先级 2 位
NVIC_PriorityGroup_3 		0-7 						0-1 					先占优先级 3 位,从优先级 1 位
NVIC_PriorityGroup_4 		0-15 						没有					先占优先级 4 位,从优先级 0 位

		注意:不设置优先级分组时,默认为NVIC_PriorityGroup_0 
		注意: 当 2(n)个相同抢先优先级和相同子优先级的中断同时出现,STM32 响应中断通道
	所对应的中断向量地址低的那个中断。(中断向量表见:stm32中文参考手册p132)
		注意:高抢占才能打断低抢占
		注意(强调):优先级分组(该函数)只能设置一次

EXTI (外部中断)
	16条中断线,每条都能触发中断

实验:通过k2(PA15)触发外部中断实现灯的点亮和熄灭

以下为外部中断的实现步骤:

1.打开复用功能和GPIO时钟

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

2.引脚GPIO初始化

	GPIO_Init()

3.映射GPIO引脚和对应的外部中断线

	GPIO_EXTILineConfig()

4.外部中断初始化

	EXTI_Init()

	typedef struct 
	{ 
		u32 EXTI_Line; 						//中断线
		EXTIMode_TypeDef EXTI_Mode; 		//中断模式
		EXTIrigger_TypeDef EXTI_Trigger; 	//触发方式
		FunctionalState EXTI_LineCmd; 		//使能
	} EXTI_InitTypeDef;

5.配置中断优先级

	NVIC_Init()
	typedef struct 
{ 
u8 NVIC_IRQChannel; //中断通道 
u8 NVIC_IRQChannelPreemptionPriority; //抢占优先级 
u8 NVIC_IRQChannelSubPriority;  //响应优先级
FunctionalState NVIC_IRQChannelCmd; //通道使能
} NVIC_InitTypeDef; 
6.编写中断处理函数

void EXTI15_10_IRQHandler(void)(不同的中断线,中断处理函数是不同的)
#ifndef __LED_H
#define __LED_H

void led_init(void);
void led_on(void);
void led_off(void);

#endif
#include "stm32f10x.h"                  // Device header
#include "led.h"

void delay(int n)
{
	int i;
	while(n--)
		for(i=0; i<8050; i++);
}

int main()
{
	led_init();

	while(1)
	{
		led_on();
		delay(1000);
		led_off();
		delay(1000);
	}

}
#include "led.h"
#include "stm32f10x.h"                  // Device header

void led_init(void)
{
	//1打开时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
	

	//2设置输入输出模式
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
	GPIO_Init(GPIOC, &GPIO_InitStructure);

}
void led_on(void)
{
	//低电平点灯
	GPIO_ResetBits(GPIOC, GPIO_Pin_13);
}
void led_off(void)
{
	//高电平关灯
	GPIO_SetBits(GPIOC, GPIO_Pin_13);

}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

设备监测诊断与维护:优化工业生产效率的关键措施

在现代工业生产中&#xff0c;设备的稳定运行对于保障生产效率至关重要。设备监测、诊断和维护作为关键措施&#xff0c;能够帮助企业及时发现设备问题、诊断故障原因&#xff0c;并采取有效维护措施&#xff0c;从而降低生产中断风险&#xff0c;提高生产效率。本文将深入探讨…

Verilog 学习之路二——基础学习总结(摘取自菜鸟教程)

目录 1 Verilog 设计方法2. 基础语法2.1 格式2.2 数值表示数值种类表示方法 2.3 数据类型2.4 表达式 3. 编译指令4. 连续赋值5. 过程结构6 过程赋值7 时序控制8 语句块9 循环10 函数例子-数码管译码 1 Verilog 设计方法 Verilog 的设计多采用自上而下的设计方法&#xff08;to…

平台化的测试工具推荐|一站式测试平台RunnerGo

互联网行业的发展到今天越来越多的公司更加注重工作效率和团队协作&#xff0c;越来越多的产品也趋于平台化&#xff0c;平台化也更有利于提高团队效率&#xff0c;代码管理、持续构建、持续部署这些工具的发展都是非常超前的&#xff0c;它们对于团队协作的支持和工作效率的提…

vue中如何通过webpack-bundle-analyzer打包分析工具进行配置优化

vue中随着项目的不断功能迭代和开发&#xff0c;项目文件越来越多&#xff0c;项目的打包文件也越来越大。如何对打包文件进行分析优化&#xff0c;减小打包文件大小呢&#xff1f;可以通过webpack-bundle-analyzer 这个打包分析工具进行解决。 1、webpack-bundle-analyzer的安…

接口漏洞-WebService-wsdl+SOAP-Swagger+HTTP-WebPack

什么是接口&#xff1f; 接口就是位于复杂系统之上并且能简化你的任务&#xff0c;它就像一个中间人让你不需要了解详细的所有细节。像谷歌搜索系统&#xff0c;它提供了搜索接口&#xff0c;简化了你的搜索任务。再像用户登录页面&#xff0c;我们只需要调用我们的登录接口&am…

【go语言学习笔记】02 Go语言高效并发

文章目录 一、并发基础1. 协程&#xff08;Goroutine&#xff09;2. Channel2.1 声明2.2 无缓冲 channel2.3 有缓冲 channel2.4 关闭 channel2.5 单向 channel2.6 selectchannel 示例 二、同步原语1. 资源竞争2. 同步原语2.1 sync.Mutex2.2 sync.RWMutex2.3 sync.WaitGroup2.4 …

TypeError: can‘t convert np.ndarray of type numpy.object_.

在处理数据集的时候出现报错&#xff1a; TypeError: can’t convert np.ndarray of type numpy.object_. The only supported types are: float64, float32, float16, complex64, complex128, int64, int32, int16, int8, uint8, and bool. train_labels torch.tensor(train…

ES6基础知识七:你是怎么理解ES6中 Generator的?使用场景?

一、介绍 Generator 函数是 ES6 提供的一种异步编程解决方案&#xff0c;语法行为与传统函数完全不同 回顾下上文提到的解决异步的手段&#xff1a; 回调函数promise 那么&#xff0c;上文我们提到promsie已经是一种比较流行的解决异步方案&#xff0c;那么为什么还出现Gen…

Docker安装Nexus并配置Maven私服

1 准备工作 1 服务器已安装docker, docker各命令无报错 2 通过dockerhub查看nexus的版本信息&#xff0c;此次使用的镜像为&#xff1a;sonatype/nexus3&#xff0c;可以看到latest版本更前的的是3.58.0&#xff0c;我们这次就使用这个版本的nexus3. 2 开始安装 # 下载镜像 do…

Java中的队列

队列的理解 队列&#xff08;Queue&#xff09;是一种特殊的线性表&#xff0c;它只允许在表的前端进行删除操作&#xff0c;而在表的后端进行插入操作。 LinkedList类实现了Queue接口&#xff0c;因此我们可以把LinkedList当成Queue来用。 常用方法 实例 import java.util…

Go基础快速入门

目录 一、变量相关基础语法 1、变量的定义以及赋值 2、变量的交换 3、匿名变量 4、变量的作用域 二、常量 三、基本数据类型 1、常见数据类型 2、数据类型的转换 四、运算符 五、函数 函数高级用法 函数也是一个类型 函数也是一个变量&#xff0c;也可以赋值 高…

Jmeter接口自动化生成测试报告html格式

jmeter自带执行结果查看的插件&#xff0c;但是需要在jmeter工具中才能查看&#xff0c;如果要向领导提交测试结果&#xff0c;不够方便直观。 笔者刚做了这方面的尝试&#xff0c;总结出来分享给大家。 这里需要用到ant来执行测试用例并生成HTML格式测试报告。 一、ant下载安…

Opencv 细节补充

1.分辨率的解释 •像素&#xff1a;像素是分辨率的单位。像素是构成位图图像最基本的单元&#xff0c;每个像素都有自己的颜色。 •分辨率&#xff08;解析度&#xff09;&#xff1a; a) 图像分辨率就是单位英寸内的像素点数。单位为PPI(Pixels Per Inch) b) PPI表示的是每英…

【stm32L152】段码屏驱动注解、MX_LCD_Init()初始化失败的解决方法

文章目录 断码屏驱动补充MX_LCD_Init()驱动初始化失败 断码屏驱动补充 已经有大神写过较详细的教程&#xff1a;https://blog.csdn.net/CSDN_Gao_16/article/details/115463499&#xff0c;但这篇博文仍然比较抽象&#xff0c;我看了好多遍才看明白-_-||&#xff0c;为了节省和…

选择最佳安全文件传输方法的重要性

在数字化时代&#xff0c;文件的传输是商务、教育、科研、医学等领域不可或缺的工作流程。为了保障数据安全&#xff0c;选择最佳安全文件传输方法非常关键。在本文中&#xff0c;我们将探讨选择最佳安全文件传输方法的重要性。 第一、最佳安全文件传输方法可以保证文件内容不被…

Jmeter常见问题之URI异常

这篇文章介绍一下"http://"重复导致的URI异常问题&#xff0c;通常从浏览器地址栏复制url&#xff0c;直接粘贴到Jmeter的http请求的服务器地址中会默认带上“http://”&#xff0c;要将http://删除&#xff0c;只写IP地址&#xff0c;如下图&#xff1a; 否则&…

ESP-C3入门20. CentOS开发环境及Jenkins流水线

一、准备环境 CentOS8已经正常安装Jenkins 二、升级 cmake cmake 升到 3.16以上。 cmake --version # 安装 g sudo yum install gcc-c export CXXg# 安装 CMake 的依赖项 sudo yum install -y openssl-devel# 下载 CMake 源码并进行编译安装 wget https://github.com/Kitwa…

[ 容器 ] Harbor 私有仓库的部署与管理

目录 一、什么是Harbor二、Harbor的特性三、Harbor的构成四、Harbor 部署五、关于 Harbor.cfg 配置文件中有两类参数&#xff1a;所需参数和可选参数六、维护管理Harbor 一、什么是Harbor Harbor 是 VMware 公司开源的企业级 Docker Registry 项目&#xff0c;其目标是帮助用户…

微服务笔记---Nacos集群搭建

微服务笔记---Nacos集群搭建 Nacos集群搭建1.集群结构图2.搭建集群2.1.初始化数据库2.2.下载nacos2.3.配置Nacos2.4.启动2.5.nginx反向代理2.6.优化 Nacos集群搭建 1.集群结构图 官方给出的Nacos集群图&#xff1a; 其中包含3个nacos节点&#xff0c;然后一个负载均衡器代理…

具身智能,是机器人的“冷饭热炒”吗?

大模型正如火如荼&#xff0c;下一个AI风口就来了。 如果你关注2023世界人工智能大会等行业峰会&#xff0c;以及英伟达、微软、谷歌、特斯拉和国內科技大厂的最新发布会&#xff0c;除了“大模型”&#xff0c;应该会听到另一个高频词——具身智能。 所谓具身智能Embodied AI …