上位机图像处理和嵌入式模块部署(f103 mcu定时器配置)

本文主要是介绍上位机图像处理和嵌入式模块部署(f103 mcu定时器配置),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        在mcu开发过程当中,有一种开发模式用的比较多,那就是中断+while(1)。这里面的中断,又是以定时器中断最为普遍。很多时候我们使用mcu,恰恰是看中了它的实时性。比如说,在运动控制中,如果以24ms作为一个周期,那么第一个6ms、第二个6ms、一直到最后一个6ms,每一个6ms做的事情都是不一样的。

        所以,对于实时性很强的操作,我们就直接在中断里面完成对应的工作。那些实时性一般的代码就放到后台来做。以前、后台的角度来说,中断处理类似于前台,while(1)类似于后台。前台如果说是处理业务,那么后台处理什么呢,通常就是日志输出、看门狗检测、数据统计等等,这都是可以放在后台来做的。今天,我们就来看看在mcu下面,定时器是怎么做的。

1、查看main函数

        首先还是查看main函数,看看如果要使用定时器,需要做些什么,

int main(void)
{SystemClock_Config();LED_GPIO_Config();SysTick_Init();while(1)                            {LED1_ON; Delay_us(1000);LED1_OFF;Delay_us(1000);}
}

        main函数比较简单,除了mcu设置、gpio设置之外,看到一个新的配置,那就是SysTick_Init。剩下来的代码就比较简单了,从名字上就可以看出,这是一个LED1点亮和熄灭的功能。代码过程当中采用了延时函数,并且这个延时函数应该和今天谈到的定时器有关。

2、定时器初始化

        前面看到了定时器初始化函数,下面就看看SysTick_Init是怎么实现的。

void SysTick_Init(void)
{if (HAL_SYSTICK_Config(SystemCoreClock / 1000)){ /* Capture error */ while (1);}
}

        代码还是比较简单的,主要就是设置一下定时周期。后面的1000除数,表示设置的定时器周期是多少,假设1s的频率是SystemCoreClock,那么除以1000,代表定时中断的周期是1ms。

3、延时判断

        LED1点亮和熄灭的时候,使用到了函数Delay_us。那我们看下,这个函数是怎么实现的,

void Delay_us(__IO u32 nTime)
{ TimingDelay = nTime;	while(TimingDelay != 0);
}

        代码不复杂,就是把参数nTime赋值给TimingDelay,接下来看TimingDelay什么时候变成0。因为没有看到其他地方对TimingDelay进行处理,所以应该是中断代码对TimingDelay进行了修改。

4、定时器中断

        直接到stm32f1xx_it.c下面寻找对应的定时器中断函数,

void SysTick_Handler(void)
{TimingDelay_Decrement();
}

        通过内容,发现定时器中断函数里面,直接调用了TimingDelay_Decrement子函数,继续分析,

void TimingDelay_Decrement(void)
{if (TimingDelay != 0x00){ TimingDelay--;}
}

        看到这个函数之后,其实就大致明白怎么回事了。原来在TimingDealy_Decrement进行了设置,只要TimeingDelay不等于0,那么每次中断的时候就会进行递减1的处理。不过因为我们定时器的精度是1ms,所以如果延时只有1ms,那么其实是不准的。

        但是如果延时的精度要求不高,比如今天使用的1s延时,那就没啥问题。

5、不变的LED1修改

        为了验证实验效果,这里通过LED1闪烁的方法进行验证,所以第一步就是需要把pin的位置修改为pc13,接下来就是烧录版本、按下复位键,如果看到led发生了闪烁,那代表一切ok;否则就要好好检查下硬件接线和软件代码了。

6、其他定时器

        除了SysTick系统定时器之外,mcu还有很多的定时器,比如说Tim系列的定时器。广义一点来说,看门狗也属于定时器。当然和SysTick相比,Tim定时器一般精度更高,用途更广。以Tim为例,它除了有定时器的功能之外,还可以用作电机编码器的一部分配置来使用,或者是pwm输出,这都是很常见的做法。

这篇关于上位机图像处理和嵌入式模块部署(f103 mcu定时器配置)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1020089

相关文章

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤

《SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤》本文主要介绍了SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤,文中通过示例代码介绍的非常详... 目录 目标 步骤 1:确保 ProxySQL 和 mysql 主从同步已正确配置ProxySQL 的

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

nginx部署https网站的实现步骤(亲测)

《nginx部署https网站的实现步骤(亲测)》本文详细介绍了使用Nginx在保持与http服务兼容的情况下部署HTTPS,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值... 目录步骤 1:安装 Nginx步骤 2:获取 SSL 证书步骤 3:手动配置 Nginx步骤 4:测

配置springboot项目动静分离打包分离lib方式

《配置springboot项目动静分离打包分离lib方式》本文介绍了如何将SpringBoot工程中的静态资源和配置文件分离出来,以减少jar包大小,方便修改配置文件,通过在jar包同级目录创建co... 目录前言1、分离配置文件原理2、pom文件配置3、使用package命令打包4、总结前言默认情况下,

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus