上位机图像处理和嵌入式模块部署(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

相关文章

SQL Server配置管理器无法打开的四种解决方法

《SQLServer配置管理器无法打开的四种解决方法》本文总结了SQLServer配置管理器无法打开的四种解决方法,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录方法一:桌面图标进入方法二:运行窗口进入检查版本号对照表php方法三:查找文件路径方法四:检查 S

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

Nginx 重写与重定向配置方法

《Nginx重写与重定向配置方法》Nginx重写与重定向区别:重写修改路径(客户端无感知),重定向跳转新URL(客户端感知),try_files检查文件/目录存在性,return301直接返回永久重... 目录一.try_files指令二.return指令三.rewrite指令区分重写与重定向重写: 请求

Nginx 配置跨域的实现及常见问题解决

《Nginx配置跨域的实现及常见问题解决》本文主要介绍了Nginx配置跨域的实现及常见问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来... 目录1. 跨域1.1 同源策略1.2 跨域资源共享(CORS)2. Nginx 配置跨域的场景2.1

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

MySQL MCP 服务器安装配置最佳实践

《MySQLMCP服务器安装配置最佳实践》本文介绍MySQLMCP服务器的安装配置方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录mysql MCP 服务器安装配置指南简介功能特点安装方法数据库配置使用MCP Inspector进行调试开发指