关于STM32的延时问题
程序员文章站
2024-02-22 12:59:28
...
最近一直在搞一辆智能小车,用STM32单片机驱动,往上面加了很多外设,外型如下:
今天下午打算在LCD显示一个温度,却发现怎么都显示不了,也找不出原因,还好我们公司的郑工帮我看出了问题,让我顺利改过来成功的显示在LCD上,毕竟比我先进公司的工程师还是要有经验一些。o(︶︿︶)o 唉,就是定时计数器少加了一个0,于是延时慢了10倍,导致温度传感器时序没有配置正确,找了一个下午。就这个问题我做下总结,在STM32中,延时的方法有两种,一种是普通延时法,用循环实现,另外一种就是嘀嗒定时器的实现方法,我们来看下网上一些大神还有野火开发板自带的杰作:
1、轮询的准确延时:
传进去1就表示1us
void Delay_us(__IO u32 nTime)
{
u16 i = 0 ;
while(nTime--){
i = 10 ;
while(i--);
}
}
2、嘀嗒定时器的精准延时法:
#include "bsp_SysTick.h"
static __IO u32 TimingDelay;
/**
* @brief 启动系统滴答定时器 SysTick
* @param 无
* @retval 无
*/
void SysTick_Init(void)
{
/* SystemFrequency / 1000 1ms中断一次
* SystemFrequency / 100000 10us中断一次
* SystemFrequency / 1000000 1us中断一次
*/
// if (SysTick_Config(SystemFrequency / 100000)) // ST3.0.0库版本
if (SysTick_Config(SystemCoreClock / 1000000)) // ST3.5.0库版本
{
/* Capture error */
while (1);
}
//NVIC_SetPriority (SysTick_IRQn, 0);
// 关闭滴答定时器
SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;
}
/**
* @brief us延时程序,10us为一个单位
* @param
* @arg nTime: Delay_us( 1 ) 则实现的延时为 1 * 10us = 10us
* @retval 无
*/
void Delay_10us(__IO u32 nTime)
{
TimingDelay = nTime;
// 使能滴答定时器
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
while(TimingDelay != 0);
}
/**
* @brief 获取节拍程序
* @param 无
* @retval 无
* @attention 在 SysTick 中断函数 SysTick_Handler()调用
*/
void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}
中断哪里要记得配置:嘀嗒定时器其实就是用了这个中断的服务函数来实现的,每几us或者nms来达到精准的延时
/**
* @brief This function handles SysTick Handler.
* @param None
* @retval None
*/
void SysTick_Handler(void)
{
TimingDelay_Decrement();
}
由于温度控制器的时序和红外的时序不同,故我在红外的时序上用了嘀嗒定时器来操作延时计数,在温度控制器上用了普通的延时方法,这样才能让我的小车的LCD上可以显示实时温度,有点小激动,今天晚上特别特别要感谢郑工,是他帮我找出了少写了一个0的bug,万分感谢,今晚学到东西了!
接下来,我将会在小车上添加摄像头,测距模块,循迹模块,RFID模块,重力传感器模块等等,励志把它打造起来,也算是我作为一名合格的工程师的一个业余项目,加油!
推荐阅读
-
关于STM32的延时问题
-
stm32 keil MDK 调试窗口变量查看遇到的问题记录(重要!!!)
-
关于用opencv 设置摄像头读分辨率问题的若干说明
-
Android 关于“NetworkOnMainThreadException”问题的原因分析及解决办法
-
关于mybatis自定义类型转换器时报没有找到相应的控制器处理的问题
-
浅谈Android中关于静态变量(static)的使用问题
-
关于Select Where In 的排序问题
-
关于关闭Java DB(Derby)时抛出异常的问题 博客分类: BlogJava2 DerbyJavaApacheJDBCJVM
-
关于textarea 中处理回车的有关问题
-
关于mysql中innodb的count优化问题分享