王者农药更新版

news2024/10/6 2:29:52

一、启动文件配置

二、GPIO使用

14759a9178074fbab3bd918ca69e301d.png 2.1基本步骤

1.配置GPIO,所以RCC开启APB2时钟

2.GPIO初始化(结构体)

3.给GPIO引脚设置高/低电平(WriteBit)

2.2Led循环点亮(GPIO输出)

1.RCC开启APB2时钟。

RCC_APB2PeriphClockCmd

2.GPIO_init初始化GPIO。参数是结构体,GPIO_PIN1 | GPIO_PIN2可以同时初始化。

3.GPIO输出

GPIO_ResetBits给gpio端口设为低电平(led点亮)

GPIO_SetBits给gpio端口设为高电平(熄灭)

GPIO_WriteBit,第三个参数决定

51ae154c4845412cba99a04552455597.jpg

5、添加延时函数

6、循环点亮

ae634e2b49a04908a0a953f5d49dfc78.jpg

 2.3按键控制两个led(GPIO输入)

Led:

1.RCC开启GPIO所在的APB2时钟

2.GPIO初始化,默认设置为高电平

3.写函数分别控制GPIO对应引脚的高/低电平,为之后按键控制做准备

按键:

1.RCC开启APB2时钟

2.GPIO初始化

3.GPIO读取输入信息,按键按下时读取为0

GPIO_ReadInputDataBit,代表输入寄存器的某个端口的值

0代表按下,防抖,如果不松开按键一直循环,松开按键后,跳出循环,再防抖,修改变量KeyNum的值代表按下pin_1对应的按键了。

GPIO_ReadInputData,代表整个输入寄存器。

1c4fe8622f6c4566b73459a8b457c1d6.jpg

 4.反转

GPIO_ReadOutputDataBit,输入的是什么,输出什么,输出0时,设为高电平灯灭。

58ede2fe11f241d5823c91cb604ee8a9.jpg

 三、显示屏(OLED)

3.1调试方法

1.串口调试

2.显示屏调试

3.keil调试

3.2显示屏调试(OLED)

c59f059ed0214a519e8431b58ffd1975.jpg

参数:行,列,值,(长度)

采用IIC或SPI协议。这里采用IIC,IIC有两个引脚SCL,SDA

1.RCC打开APB2时钟

2.GPIO初始化,要注意SCL和SDA对应GPIO引脚都要初始化,这里是pin8和pin9,且因为IIC协议有上拉电阻,所以是开漏输出

3.引脚配置,默认SCL和SDA两个引脚都配置为高电平

e77f371b5b3f4e079b87ae0a9b0c6962.jpg

9c597040741343469051b117d39cbc16.jpg

 4.最后通过导入OLED.h显示

四、EXTI中断

4.1stm32中断

中断方法有很多,EXTI,TIM,ADC,USART,IIC

6395a5f47f044cdeae85313c0f0643ba.jpg

NVIC用来决定优先级。

4.2中断基本步骤

3b69ff15a61e4b7f9c484b8a011f6805.png

 

a0b1a3ff38ba4c0c9ba20f3670e022cc.jpg

1.RCC开启GPIO和AFIO对应的APB2的时钟,EXTI和NVIC默认是开着的

2.GPIO初始化(结构体)

3.AFIO配置,用来选择哪个GPIO,GPIO的哪个引脚发生中断,用GPIO_EXTILineConfig(GPIO中断线引脚)

4.EXTI中断配置,EXTI初始化——EXTI_Init函数(结构体)

5.NVIC优先级组配置和初始化,通过对优先级分组来决定优先级,使用NVIC_PriorityGroupConfig,之后进行NVIC初始化——NVIC_Init

4.3具体步骤

1.RCC时钟配置,主要GPIO和AFIO。EXIT和NVIC是一直打开时钟的,不需要配置

924a3378b20f4587894fd451de500278.jpg

2.GPIO配置初始化,上拉输入

dfd2d58ccb134028bf778569fdf7aeac.jpg

3.AFIO配置

第二个是选择中断引脚

第一个是重映射,先不用

715f3c63473f4147bd6361c15ead770c.jpg

 ea5f3b1790c841bdbcaee60bf1938a98.jpg

4.EXTI配置

936e4730583844e7be3d5d4aeae53b34.jpg

 b058539a4d8441cb9eb98b47264dbc45.jpg

 Mode选中断模式,还有个事件模式

Triggle分为上升沿触发(从低电平到高电平),下降沿触发(从高电平到低电平触发,选这个)和上升下降沿触发

5.NVIC配置 49281e4789334430b399c218a952a0a2.jpg

 65d0122a8f9e49eab23041e5633bf716.jpg

 先分组,这里分到组2,也可以选其他组,然后NVIC初始化。

6.中断配置好了,接下来让cpu从主程序跳到中断程序,中断函数的名字固定的

f571d814ade5404681754057050360a7.jpg

先判断中断标志位是不是pin14,如果是,执行中断程序,最后中断标志位清空,否则一直循环中断程序。

挡光片遮挡后,led灯会触发中断,灯灭

五、TIM定时中断

5.1基本步骤

d5df518ee76344ee92dd051881ae2f3f.png

4a719d7fdb68488f82495a79df9d5aae.jpg

1.TIM1和TIM8是高级定时器,TIM2-5是通用定时器,TIM6和TIM7是基本定时器。这个芯片只有TIM1-4,这里用的是TIM2通用定时器。所以RCC打开TIM2对应的APB1(低速外设)时钟。

2.TIM配置内部时钟/ETR外部时钟/ITRX其他定时器/TIx捕获通道,这里使用内部时钟,内部时钟使用TIM_InternalClockConfig。

(RCC掌管外设时钟,TIM定时器是外设)

3.时基单元初始化(结构体),TIM_TimeBaseInit

4.中断输出控制,定时器很多地方都需要申请中断,使用TIM_ITConfig

5.配置NVIC,有中断就有优先级,优先级+初始化

6.运行控制,放最后定时器运行,TIM_Cmd

5.2具体步骤

1.配置GPIO时钟

f9d0f3b9035948f9927babf348a74e25.jpg

 

2.配置RCC内部时钟/ETR外部时钟/ITRX其他定时器/TIx捕获通道

fda315c920b24e7eaeec80b51be1b7cc.jpg

 e720ec6c337b4fbab55690a6ac01d2c1.jpg

 

3.配置内部时钟模式/外部时钟模式2/外部时钟模式1/编码器模式

4.配置时基单元和运行控制(放最后)

e15c5e4ee1f64cd68add91883959409e.jpg

 1bfcf4e397b346e180e9b3545557e365.jpg

 414dba3795a9455fa831bf811be9f4c0.jpg

 

5.配置中断输出控制

44f981bfd9b64434a3be8a12479dbe13.jpg

 fe1440a2305f4289ab62b02191db5263.jpg

 

6.配置NVIC

0fd2000f360f43a7b3d51a065f00311c.jpg

 7.计数

63c8a0fbec3b456cb99ae1101a72b07d.jpg

 六、TIM输出比较

6.1TIM输出比较与PWM

fb726897cfa6445caaf5361c610e1e1d.jpg

 f735897061ac41c59b16788c45bab69d.jpg

 PWM(Pulse Width Modulation),即脉冲宽度调制,是一种模拟电路数字控制技术。它通过改变脉冲信号的占空比(即脉冲宽度与周期的比值)来等效地获得所需的模拟量(电压或电流)输出。

6.2呼吸灯实现的基本步骤

5e55b2d07cca401b8aba52374279148c.png

1.因为要用到GPIO和TIM,所以RCC需要打开APB2和APB1的时钟

 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

2.GPIO初始化(led灯)

3.开启TIM2内部时钟

4.时基单元初始化

5.输出比较(oc)单元初始化TIM_OC1Init

6.运行控制

7.修改占空比,TIM_SetCompare1函数可以设置CCR的值(1是因为OC1通道1)

 

6.3具体步骤

1.RCC开启GPIO和TIM时钟

2.配置时基单元

5150ae6988314330b20590dabab6f0ed.jpg

3.配置输出比较单元

824c86ae81364b928a1410a024df3c36.jpg

 fa681ce0f05c4523b5c88c6570326481.jpg

 IIM_OCInitTypedef结构体有很多属性,有一些高级定时器用的,我们不用配置,所以需要给这些初始化,用TIM_OCStructInit,然后把需要的配置。

注:这里初始化是TIM_OC1Init,用于初始化定时器的输出比较通道1。每个定时器的输出比较总共有4个通道

4.配置GPIO,复用推挽输出

3c73e3e12d9a4146a6e04fae84812a8a.jpg

 我们在GPIO,PA0引脚,所以输出比较单元用的TIM_OC1Init。这里配置PA0。

43cc1f942dfe471d82b90568e8195307.jpg

5.运行控制(TIM_Cmd)

8c2869f98d974fe59a916c735b8ff46a.jpg

 6.参数计算

43627ca1d1e94fad8ae87b0f9f60ee77.jpg

4cf70a48b6c741ebba256c899fb8d6eb.jpgda2c91b98902417fb88abbb460ffbcaa.jpg 7.呼吸灯

5add23b510674b1180cabbc1654c0aee.jpg 6df5c9cbf2ad4313b26aaaad644e6ba3.jpg

 

当CCR大的时候亮,小的时候暗,所以要实现呼吸灯,需要不断改变CCR的值,用TIM_SetComparel函数可以设置CCR的值,主循环中让它逐渐增大,然后逐渐减少。

8.拓展——重映射

9e8973d3bf2e4d2bb40e096bd75dbf1f.jpg

 

6.4舵机控制

eb411809ef844e209bd2ed07cc2162df.jpg

和呼吸灯步骤一样,只需要修改通道和占空比即可,分别是OC2Init()和TIM_SetCompare2(TIM2, Compare)。呼吸灯是TIM_SetCompare1。

七、输入捕获

7.1测频率基本步骤

765dcc6d17524c73a4c81834cc3c5d93.jpg

1.RCC开启GPIO和TIM的时钟

2.GPIO初始化,配置成输入模式

3.时基单元初始化

4.输入捕获单元初始化

5.配置触发源,这里使用FI1PF1触发源

6.配置从模式Reset

7.运行控制

7.2具体步骤

1.RCC开启GPIO和TIM的时钟

2.GPIO初始化,配置成输入模式

b18e2685593244e4912cf029e1a38c41.jpg

b5c9c2fdcddf4c1ebbfc555cc14aeb3d.jpg

 3.时基单元初始化

bc94d70c3499471eb9410948a689c364.jpg

4.输入捕获单元初始化

23de35b4c457462dacfeeddb3054d45f.jpg

 这是只测频率,所以使用ICInit即可,ICSelection选择直联通道。

 

5.配置触发源,这里使用FI1PF1触发源

3ef4dd0dcef14e6e8d3d1b98f6998f16.jpg

 

6.配置从模式Reset

fa44c2726f19495abe5053e709ff349f.jpg

 

7.运行控制

7c2b07b3a9d849d1b96b7de254b9898b.jpg

 7.3测频率和占空比

1d2b7a592dfe41aea02c79f7deb52e22.jpg

 把TIM_ICInit函数换成TIM_PWMIConfig函数,这个函数能同时初始化两个通道。这里通道1是直联和上升沿,默认配置通道2是交叉和下降沿,与通道1正好相反。

八、USART串口通信协议

8.1常见通信协议

feabe1dc30484abf8672acda63cc3771.jpg

 半双工:A能给B发数据,B也能给A发数据,但是不能同时发。

全双工:A能给B发数据,B也能给A发数据,而且能同时发。

同步:通信双方有一个共同的时钟信号,通讯中通常双方会统一规定在时钟信号的上升沿或下降沿对数据线进行采样。

异步:数据传输速度匹配依赖于通信双方有自己独立的系统时钟,大家约定好通信的速度。异步通信不需要同步信号,但是并不是说通信的过程不同步。

8.2串口通信方式

c1642a4171224e7da4f118d333964a52.jpg

 两个设备之间发送端和接收端交叉连接。

因为两个设备可能要不同的电平,中间可以加电平转化芯片,本芯片采用TTL电平——3.3V

e9bfd01055c34091924e6aab5db72030.jpg

设备1给设备2发送数据:假设设备1每一秒发送一次高电平(3.3V)或低电平(0V),设备2就必须每一秒接受一次,如果时间不一样,可能重复或错过。

这个每秒发送一次数据就叫波特率。如果发送的高电平,则接受到1,如果是低电平,则接受到0。

7e38f75d71f74ef2b6dd47ba9f311253.jpg

8.3串口发送+接收数据基本步骤

54bf551f9d8648c18b4c573851131cd3.jpg

 dbc867c6714f4b069888f733fddcdcd2.png

1.RCC开启USART1和GPIO时钟

2.GPIO初始化,TX配置成复用输出,RX配置成输入

3.USART初始化

4.如果只发送,直接开启USART即可。如果还要接收数据,则需要配置中断。

5.中断输出控制(发送+接收)

6.NVIC(发送+接收)

8.4具体步骤

1.RCC开启USART1和GPIO时钟

b0d307a245774c5e84f895f3a8402785.jpg

 2.GPIO初始化,TX配置成复用输出,RX配置成输入

1857152cb8fd44fda27d000f8c73ec35.jpg

 3.USART初始化

d20f76f92b65476bb41a4f1659f1541b.jpg

 4.运行控制USART

bfbeaaed04404416bf4766d58852b766.jpg

 5.上面已经可以发送了,现在发送数据

发送之后到TDR,需要等待一段时间,等TDR的数据传到移位寄存器后,再发送下一次数据,如果不等待,可能造成数据覆盖。标志状态为reset时一直循环等待

07656c1777f04b08ad39bed0cc89d5c0.jpg

6.如果还要接收数据,需要中断,并且串口初始化时,需要把接收数据的模式加上

5a81af7f371a434cb30e0f2479f9c75c.jpg

 3827e12e65ec4b1b9d1b9f85d2925d5e.jpg

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

相关文章

Transformer架构概述(二)

目录 1. Transformer架构概述 1.1 《Attention is All You Need》论文概述 1.2 Transformer的模块组成 1.3 Encoder 和 Decoder 的区别与联系 2. Transformer的并行计算效率相对于RNN的提升 2.1 RNN中的顺序处理问题 2.2 Transformer中的并行化优势 3. Self-Attention机…

Spring Boot框架下的大学生就业招聘平台

5系统详细实现 5.1 用户模块的实现 5.1.1 求职信息管理 大学生就业招聘系统的用户可以管理自己的求职信息,可以对自己的求职信息添加修改删除操作。具体界面的展示如图5.1所示。 图5.1 求职信息管理界面 5.1.2 首页 用户登录可以在首页看到招聘信息展示也一些求职…

setTimeout,setInterval ,requestAnimationFrame定时器

setTimeout,setInterval ,requestAnimationFrame定时器 定时器函数通常用于执行定时任务,也就是说你做了一个功能放在定时器函数里,它可以在特定的时间去执行你的指令,或者说隔多长时间(单位时间内—毫秒为…

为什么每个人都要学习项目管理?

在这个已然到来的超级个体时代,项目管理这项技能,不仅仅是项目经理才需要掌握的,而是每个想要独当一面之人的必备技能。 所谓的独当一面,就是从一个人做好自己的事,到带领一群人从头到尾把事做成。而学习项目管理&…

路由器的工作机制

在一个家庭或者一个公司中 路由器的作用主要有两个(①路由–决定了数据包从来源到目的地的路径 通过映射表决定 ②转送–通过路由器知道了映射表 就可以将数据包从路由器的输入端转移给合适的输出端) 我们可以画一张图来分析一下: 我们好好来解析一下这张图&#x…

Chromium 搜索引擎功能浅析c++

地址栏输入:chrome://settings/searchEngines 可以看到 有百度等数据源,那么如何调整其顺序呢,此数据又存储在哪里呢? 1、浏览器初始化搜索引擎数据来源在 components\search_engines\prepopulated_engines.json // Copyright …

el-pagination组件封装

组件使用 源代码&#xff1a; <script setup> import Pagination from /components/pagination/index.vue import {ref} from "vue";const pageNum ref(1) const pageSize ref(10) const total ref(120)function loadData() {// 加载数据 } </script>…

C++教程一口气讲完!(万字讲解)( ̄y▽ ̄)╭ Ohohoho... 下

C 常量 常量是固定值&#xff0c;在程序执行期间不会改变。这些固定的值&#xff0c;又叫做字面量。 常量可以是任何的基本数据类型&#xff0c;可分为整型数字、浮点数字、字符、字符串和布尔值。 常量就像是常规的变量&#xff0c;只不过常量的值在定义后不能进行修改。 …

【设计模式】软件设计原则——开闭原则里氏替换单一职责

开闭原则内容引出 开闭原则 定义&#xff1a;一个软件实体&#xff0c;类&#xff0c;函数&#xff0c;模块&#xff1b;对扩展开放&#xff0c;对修改关闭。用抽象构建框架&#xff0c;用实现扩展细节。可以提高软件的可复用性和可维护性。 开发新功能时&#xff0c;尽量不修…

Redis实现每日签到(大数据量)

PHP语言使用Redis NoSQL服务器二进制数据类型实现大数据情况下签到功能 目录 问题 解决方式 封装签到类 功能调用 总结 问题 实现用户每日签到功能不难&#xff0c;但随着用户量上升之后&#xff0c;不论是存储还是判断对数据量来说都很麻烦&#xff1b;假如每天有100万用…

pytorch 与 pytorch lightning, pytorch geometric 各个版本之间的关系

主要参考 官方的给出的意见&#xff1b; 1. pytorch 与 pytorch lightning 各个版本之间的关系 lightning 主要可以 适配多个版本的 torch; https://lightning.ai/docs/pytorch/latest/versioning.html#compatibility-matrix&#xff1b; 2. pytorch 与 pytorch geometric 各…

深度学习-----------------------------束搜索

目录 贪心搜索&#xff08;一般来说计算最快的&#xff09;穷举搜索&#xff08;一般来说是最好的&#xff0c;但可能算不动&#xff09;束搜索&#xff08;Beam Search&#xff09; 总结 贪心搜索&#xff08;一般来说计算最快的&#xff09; 在seq2seq中使用贪心搜索来预测序…

软考数据库部分 ---- (概念数据库模型,三级模式,两级映像,事物管理)

文章目录 一、概念数据库模型二、结构数据库模型三、三级模式四、两级映像五、关系模式基本术语六、关系模式七、关系的数学定义八、数据定义语言九、SQL访问控制十、视图十一、索引十二、关系模式十三、范式十四、数据库设计十五、事物管理&#xff08;ACID&#xff09;十六、…

基于SPI协议的Flash扇区擦除实验

当一块Flash芯片中的不同的扇区烧录了不同的程序&#xff0c;而我们只想擦除某个扇区的程序保留其他程序时&#xff0c;Flash的全擦除是不能满足要求的&#xff0c;这时候就需要扇区擦除来实现这一功能。扇区擦除可以对Flash芯片中的某一扇区进行擦除而不改变其他扇区中的存储数…

2.3MyBatis——插件机制

2.3MyBatis——插件机制 1.基本用法2.原理探究2.1加载过程2.2执行过程2.2.1 插件的执行点2.2.2 SQL执行的几个阶段2.2.3 如何梳理出执行流程 插件机制是一款优秀框架不可或缺的组成部分&#xff0c;比如spring、dubbo&#xff0c;还有我们要聊的Mybatis等等。所谓插件&#xff…

【AI大模型】使用Embedding API

一、使用OpenAI API 目前GPT embedding mode有三种&#xff0c;性能如下所示&#xff1a; 模型每美元页数MTEB得分MIRACL得分text-embedding-3-large9,61554.964.6text-embedding-3-small62,50062.344.0text-embedding-ada-00212,50061.031.4 MTEB得分为embedding model分类…

Linux驱动开发(速记版)--printctl子系统

第102章 pinctrl 子系统的引入 Linux中的 pinctrl子系统是管理和配置GPIO引脚的框架&#xff0c;提供标准化方法以适应不同硬件。 它遵循 Linux内核设备模型&#xff0c;分为设备、驱动等部分。 本章节从设备和驱动角度介绍 pinctrl子系统。 102.1 pinctrl 设备树 在设备树中&a…

旅游心动盲盒:开启个性化旅行新体验

嘿&#xff0c;宝子们&#xff01;在如今这个数字化时代呀&#xff0c;文心智能体可是给咱们的生活带来了超多便利和创新呢。今天呀&#xff0c;我来给大家介绍一款超棒的智能体——旅游心动盲盒&#xff0c;它肯定能给你的旅行带来全新的惊喜和超个性化的体验哟。 一、项目背…

基于H3C环境的实验——OSPF

目录 实验设备和环境 实验设备 实验环境 实验记录 1、单区域 OSPF基本配置 步骤1:搭建实验环境并完成基本配置 步骤2:检查网络连通性和路由器路由表。 步骤3:配置OSPF 步骤4:检查路由器OSPF邻居状态及路由表 实验设备和环境 实验设备 三台路由器、两台PC、电源线、两…

GO网络编程(四):海量用户通信系统2:登录功能核心【重难点】

目录 一、C/S详细通信流程图二、消息类型定义与json标签1. 消息类型定义2. JSON标签3.结构体示例及其 JSON 表示&#xff1a;4.完整代码与使用说明 三、客户端发送消息1. 连接到服务器2. 准备发送消息3. 创建 LoginMes 并序列化4. 将序列化后的数据嵌入消息结构5. 序列化整个 M…