当前位置: 首页 > wzjs >正文

西安知名网站建设公司排名客户资源买卖平台

西安知名网站建设公司排名,客户资源买卖平台,商业网站建设的意义,出口商出口外贸流程楼主最近也是在研究STM32 , 比起ESP32 ,他提供了更多靠近底层的操作。给了工程师很大的自由度。很值得研究!ψ(`∇)ψ 计时一直是逻辑电路中的一个重要命题,今天楼主带来了两种计时方法,并且都有详细的代码…

楼主最近也是在研究STM32 , 比起ESP32 ,他提供了更多靠近底层的操作。给了工程师很大的自由度。很值得研究!ψ(`∇´)ψ
计时一直是逻辑电路中的一个重要命题,今天楼主带来了两种计时方法,并且都有详细的代码解释。希望对你有所帮助。

楼主分两段,想直接找方案的,把代码COPY走就行,下面也有底层原理解释

基于systick的阻塞式的方法

首先是代码,COPY走了可以直接运行。
(贴一下,代码源是江协科技写的延时头文件,也是楼主的学习资料!楼主加了更多注释)

void Delay_us(uint32_t xus)
{SysTick->LOAD = 72 * xus;				//设置定时器重装值//原理是一个比例: 1s <-> 72MHZ  xus <->  p// p=72MHZ * xus = 72x (MHZ 和 us 抵消了 )SysTick->VAL = 0x00;					//清空当前计数值,立刻触发重装载SysTick->CTRL = 0x00000005;				//设置时钟源为内部计时器,HCLK,不触发systick 中断,启动定时器//0x0101 =0x5 while(!(SysTick->CTRL & 0x00010000));	//这里使用的特性是重装结束,且systick递减到0后,将CTRL的COUNTFLAG置数为1//因为寄存器是自动工作计数的,所以这里实现了,阻塞式的等待计数到0的功能SysTick->CTRL = 0x00000004;				//关闭定时器
}

原理

SysTick 的寄存器结构

systick 计时器也是时钟和寄存器构成的,不过,他是从一个值,向下计数的

SysTick 由 4 个可访问的寄存器组成,这些寄存器通过 内核总线(AHB/APB) 访问(参见系统架构):

  1. VAL(当前值寄存器)

    • 地址:0xE000_E018
    • 功能:读取当前计数器的值,或写入任意值以强制计数器清零并重新开始计数。
    • 注意,VAL虽然是32 位寄存器,但是我们只使用24位。也就是最大计数到1677,7215
      (如果你的时钟是72MHZ,这个计时器最大计0.233s )
    • 在这里插入图片描述
  2. LOAD(重载值寄存器)

    • 地址:0xE000_E014
    • 功能:设置计数器的初始值(当计数器减到 0 时,会重新加载该值)。
    • LOAD的计时器也是24位
    • 在这里插入图片描述
  3. CTRL(控制与状态寄存器)

    • 地址:0xE000_E010

    • 功能:配置 SysTick 的工作模式、使能中断、查询计数状态。

    • 在这里插入图片描述

    • 这里不要混淆了。STM32 的寄存器要么是16位,要么是32位。

    • 在这里插入图片描述

  4. CALIB(校准值寄存器)(一般不使用)

    • 地址:0xE000_E01C
    • 功能:提供一个参考值,用于校准 SysTick 的时钟源(通常为 AHB 时钟的 1/8)。

基于计时器TIM的非阻塞式的计时器

上面的代码虽然简单,但是有一个重要的问题,函数是阻塞式的。有时候我们并不希望阻塞,而是希望非阻塞,到点触发中断。这个时候就需要使用STM32 内置的TIM计时器了

//注意使用标准头文件
void Timer_init()
{//使用RCC时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 ,ENABLE);//配置为内部时钟TIM_InternalClockConfig(TIM2);//初始化时基单元TIM_TimeBaseInitTypeDef  time2bainit;time2bainit.TIM_ClockDivision = TIM_CKD_DIV1 ;time2bainit.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式//这里希望1HZ ,HCLK=72MHZ ,所以ARR和PSC乘起来等于72MHZ就行(别忘了减一)//还有,这里的ARR 和 PSC都是16bit ,最大值不能超过65535 (单个计数器最大计1min左右)time2bainit.TIM_Period =10000 - 1;  //ARR自动装载周期time2bainit.TIM_Prescaler = 7200 - 1; //PSC预分频器的值time2bainit.TIM_RepetitionCounter = 0;//重复计数器,是通用计数器的特性,不用的话,给0就行TIM_TimeBaseInit(TIM2 , &time2bainit);//使能中断,开启更新中断到NVIC的通路TIM_ITConfig(TIM2 ,TIM_IT_Update ,ENABLE);//配置NVIC NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2 );NVIC_InitTypeDef nvic_initstructure;nvic_initstructure.NVIC_IRQChannel = TIM2_IRQn;nvic_initstructure.NVIC_IRQChannelCmd = ENABLE;nvic_initstructure.NVIC_IRQChannelPreemptionPriority = 2 ;nvic_initstructure.NVIC_IRQChannelSubPriority = 1 ;NVIC_Init(&nvic_initstructure);// 最后使能TIM_Cmd(TIM2 ,ENABLE);}//配套的中断函数
//在启动文件 start 下的startup_stm32f10x_md.s下
void TIM2_IRQHandler() //定时器2 的中断函数
{if(TIM_GetITStatus(TIM2 , TIM_IT_Update) ==SET){// 在这里写触发中断时候你希望的逻辑TIM_ClearITPendingBit(TIM2 , TIM_IT_Update);}
}

原理

在这里插入图片描述
这个的原理就比较复杂了,STM32里面有各种类型的计时器,我们使用的是通用计时器TIM2.但是最基本的原理都是一样的: 时钟+ 计数器 = 定时器 最根本的问题就是,时钟怎么选, 怎么计数,到点了怎么办。

http://www.dtcms.com/wzjs/200466.html

相关文章:

  • 如何做网站搭桥链接安卓系统优化app
  • 政府类网站风格特点流量平台
  • 工程造价建设信息网站男生短期培训就业
  • 商洛网站建设公司seo网站监测
  • 企业网站改自适应seo怎么做优化
  • iis 提示网站到期英文网站seo
  • wordpress自媒体二号seo基础
  • 厦门市网站建设公司谷歌seo课程
  • 男女之间做下面哪个网站免费郑州关键词排名外包
  • 快速做网站哪家好百度官方首页
  • 北京门户网站网络销售公司
  • 网上购物网站制作百度禁止seo推广
  • 成立公司需要什么材料和手续上海何鹏seo
  • 用帝国做网站怎么样网站软文代写
  • 网站的封面怎么做苏州网站开发公司
  • 临沂经开区建设局网站seo引擎搜索入口
  • 怎么做网站客服seo软件服务
  • 网站建设采取招标的方式怎么从网上找国外客户
  • 制作灯笼的步骤及图片如何优化标题关键词
  • 网站建设如何报价seo工具优化软件
  • pop布局的网站黑科技引流推广神器免费
  • 百度联盟做网站赚钱吗chrome手机安卓版
  • 制作手机网站什么软件下载seo岗位工资
  • 成都大型商城网站建设群站优化之链轮模式
  • 比较好的网站建设论坛百度竞价推广方案的制定
  • 装修平台哪个好旺道seo优化
  • 广西柳州网站制作公司南昌seo招聘信息
  • 制作公司网站一般多久能好广州seo工作
  • 哪些网站用vue.js做的网络推广seo公司
  • 专门做品牌折扣的网站留电话的广告网站