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

做佛教网站的人从中谋利吗免费广告推广

做佛教网站的人从中谋利吗,免费广告推广,做网站买一个域名就够了吗,手机网站建设找哪家好GD32中的定时器 GD32E230中有七个定时器,六种类型,其中通用的L4版本有两个,其他类型的各一个。 那我们就以通用L4这个类型来敲代码,其他流程是通用的。 通用L4 虽然每种类型的定时器都有自己的结构框图,但是其实大差…

GD32中的定时器

GD32E230中有七个定时器,六种类型,其中通用的L4版本有两个,其他类型的各一个。

那我们就以通用L4这个类型来敲代码,其他流程是通用的。

通用L4

虽然每种类型的定时器都有自己的结构框图,但是其实大差不差,定时器来来回回不就那几个寄存器嘛,自动重装载寄存器,预分频器,要输出个PWM就再来个输出比较。

要注意的就是通用L4这边的时钟源只有一个。

因此用GD32的定时器的时候,要去手册翻翻对应的定时器里的介绍,因为GD32里定时器种类还不少,细节上还是有差异的。

那我们来看看给L4提供的时钟源是多少频率的,这关系到我们后面参数的设置。

从左边AHB过来是72MHz,给Timer0,14,15,16提供时钟之前经过一个分频器,这个分频器是如果APB2的分频是1分频,那么它也是1分频,如果不是,那么是2分频,而APB2就是1分频,因此它也是1分频,也就是说没有减少我们的时钟频率,因此给L4的时钟频率就是72MHz。

定时器溢出频率的公式跟STM32是一样的,就是时钟频率/((自动重装载寄存器的值+1)*(预分频器的值+1))

固件库函数

rcu_periph_clock_enable(RCU_TIMER15)

定时器相关函数很多,我们只挑这次用到的讲。

timer_init

初始化定时器,参数一选择是哪一个定时器。

参数二传入一个结构体变量的指针。

我们来看看这个结构体。

通过配置预分频值和周期来控制定时器溢出的频率,就用上面的公式,把这个周期看成是自动重装载计数器就行。

对齐方式一般选择边缘对齐TIMER_COUNTER_EDGE

计数方式选择向上计数TIMER_COUNTER_UP,L4里也只能向上计数。

时钟分频因子这个是输入捕获的时候才用的到的,我们可以不配。

重复计数器值是只溢出多少次之后再溢出才进一次中断的,不过只有高级定时器才有,我们也不配。

timer_enable

使能定时器,当我们配置完定时器包括中断之后就可以使能了。

timer_disable

失能定时器。

timer_prescaler_config

配置预分频器的模式,我们选择立即加载。

timer_interrupt_enable

使能中断,中断源我们就选第一个,更新中断,这是不管哪一种定时器都能用的,其他参数可以参考上面表格的说法。

timer_interrupt_flag_get

获取中断标志位,一样是在中断处理函数中判断是哪个中断源触发的中断。

timer_interrupt_flag_clear

清除中断标志位,除了在中断处理函数中使用,我们在一开始配置定时器的时候就需要用一下,否则会马上触发一次中断。

上面这些函数就足够我们进行最基础的一个计时了,但是还有个问题,就是中断,中断都需要配置NVIC。

NVIC使能的函数我们在上一篇外部中断里说过了,这边就直接把代码贴出来了。

nvic_irq_enable(TIMER15_IRQn,1);

最后一个就是中断处理函数了,我们一样是从启动文件的汇编文件里去找。

秒表示例代码

#include "gd32e23x.h"
#include "systick.h"
#include "OLED.h"uint16_t Z_Time_s = 0 ,Z_Time_10ms = 0;void TIMER15_IRQHandler(void){    if(timer_interrupt_flag_get(TIMER15,TIMER_INT_FLAG_UP) == SET){        timer_interrupt_flag_clear(TIMER15,TIMER_INT_FLAG_UP); //清除中断标志位   if(++Z_Time_10ms >= 100) {Z_Time_10ms = 0;++Z_Time_s;}}
} int main(void){systick_config();OLED_Init();rcu_periph_clock_enable(RCU_TIMER15);                   //开启定时器时钟  timer_parameter_struct timer_initpara;                  timer_initpara.prescaler = 200 -1;                      //预分频timer_initpara.alignedmode = TIMER_COUNTER_EDGE;        //边缘对齐timer_initpara.counterdirection = TIMER_COUNTER_UP;     //向上计数timer_initpara.period = 3600  - 1;                      //周期timer_init(TIMER15,&timer_initpara);                    //初始化定时器timer_prescaler_config(TIMER15, 1, TIMER_PSC_RELOAD_NOW);//设置预分频器为立即加载模式timer_interrupt_flag_clear(TIMER15, TIMER_INT_FLAG_UP); //清除中断标志位,否则一开始就会进一次中断nvic_irq_enable(TIMER15_IRQn, 1);                       //设置中断优先级timer_interrupt_enable(TIMER15, TIMER_INT_UP);          //使能更新中断 timer_enable(TIMER15);                                  //使能定时器OLED_ShowString(1,5,":");while(1){OLED_ShowNum(1,1,Z_Time_s,4);OLED_ShowNum(1,6,Z_Time_10ms,2);}
}

我这边做个秒表的效果,以精度在10ms,因此我们需要每秒定时器溢出中断100次。

因为时钟源是72MHz,因此需要让72MHz去除以(周期+1)再除以(预分频+1)最终等于100即可。

最后一点要注意的就是这俩寄存器是16位的,因此设置周期和预分频的值的时候要注意不要超过65535了。

大家可以配合上个文章的外部中断,在这个秒表的基础上加几个按钮,实现暂停继续,清零等功能。就当是课后作业了(bushi)

http://www.dinnco.com/news/74280.html

相关文章:

  • 网络服务器怎么连接厦门seo代理商
  • 专门做电路图的网站网络营销企业案例分析
  • 江苏通信建设交易中心网站网店营销
  • 如何做闲置物品自己的网站如何做好搜索引擎优化工作
  • 天津企业建站程序网页设计软件有哪些
  • 展示型网站怎么做东莞做网页建站公司
  • 企业网站模板 cssseo免费工具
  • 卓越 网站建设 深圳西乡校园推广
  • 常州做网站一般多少钱今日头条官方正版
  • 现在ps做网站的尺寸凡科网
  • 手机网站范例seo关键词优化公司哪家好
  • 东莞做网站seo优化北京seo关键词排名优化
  • asp网站经常 响应北京seo推广
  • 做网站需要学php哪些技术google谷歌搜索主页
  • 自己的网站怎么做app中国新冠疫苗接种率
  • 如何上传ftp网站程序搜索网排名
  • qq怎么做网站在线聊天北京全网营销推广公司
  • 网站做移动端怎么在百度上投放广告
  • 建网站怎么起名字网站百度收录
  • 企业服务工作站网络营销和传统营销的区别
  • 网站seo文章该怎么写成都seo推广
  • 网站建设卖东西百度seo公司哪家强一点
  • 做网站金山seo推广灰色词
  • 深圳本地网站建设百度代运营推广
  • 北京上海网站建设公司苏州seo关键词优化价格
  • 供应链管理有限公司站长之家seo信息
  • 网站空间转移网站关键词优化公司哪家好
  • 宝安区做网站自己代理一款手游需要多少钱
  • 免费项目进度管理软件美国seo薪酬
  • 社交网络推广方法有哪些搜索引擎优化 简历