Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
AB32VG1
RT-Thread Studio
学习笔记
AB32VG1系列之定时器
发布于 2021-03-14 16:31:16 浏览:1244
订阅该版
[tocm] # TIMER > 时间:2021年3月13日14:16:47 > 2021年3月17日18:59:55:更新硬件定时器 > > 作者:JiangYangJie > > 项目地址: https://gitee.com/JiangYangJie/ab32-vg1_-study_-notes ## 1.SysTick分析 在`board.c`中,提到了定时器0.如下图  将关于定时器和systick的代码进行分析。 ```c // 定时器0中断 void timer0_isr(int vector, void *param) { rt_interrupt_enter(); TMR0CPND = BIT(9); // timer0中断清除标志位 rt_tick_increase(); // 滴答时钟增加 rt_interrupt_leave(); } void timer0_init(void) { TMR0CON = BIT(7); //使能溢出中断 TMR0CNT = 0; // timer0 计数值清0 rt_hw_interrupt_install(IRQ_TMR0_VECTOR, timer0_isr, RT_NULL, "tick"); // 注册中断 } void timer0_cfg(uint32_t ticks) { TMR0PR = (uint32_t)(ticks - 1UL); //1ms interrupt TMR0CON |= BIT(0); // EN 使能timer0 } // 系统时钟初始化 void rt_hw_systick_init(void) { CLKCON2 &= 0x00ffffff; CLKCON2 |= (25 << 24); //配置x26m_div_clk = 1M (timer, ir, fmam ...用到) CLKCON0 &= ~(7 << 23); CLKCON0 |= BIT(24); //tmr_inc select x26m_div_clk = 1M set_sysclk(SYSCLK_48M); // 最高可倍频到120MHz /* Setting software interrupt */ set_cpu_irq_comm(cpu_irq_comm); rt_hw_interrupt_install(IRQ_SW_VECTOR, rt_soft_isr, RT_NULL, "sw_irq"); timer0_init(); hal_set_tick_hook(timer0_cfg); hal_set_ticks(get_sysclk_nhz()/RT_TICK_PER_SECOND); // get_sysclk_nhz()/RT_TICK_PER_SECOND = 48000 PICCON |= 0x10002; // 中断向量表使能 } ``` ## 2.软件定时器的使用 ```c #include "main.h" // 函数定义 static void Led_TimerCallback(void *parameter); // 变量定义 int8_t flag = 0; static void Led_TimerCallback(void *parameter){ RGB_Blue(~flag); flag = ~flag; } /* * 软件定时器 */ rt_timer_t Timer_Init(void){ return rt_timer_create("led", Led_TimerCallback, RT_NULL, 1000, RT_TIMER_FLAG_PERIODIC); //创建一个1s周期定时器 } int Timer_Start(void){ RGB_Init(); rt_timer_t timer = Timer_Init(); rt_timer_start(timer); return 0; } INIT_APP_EXPORT(Timer_Start); ``` 效果:RGB灯蓝光间隔一秒闪烁 ## 3.硬件定时器 > 配置  > 代码 ```c rt_device_t hw_dev; //设备句柄 rt_hwtimer_mode_t mode; //控制参数,单次定时OR周期定时 rt_hwtimerval_t timeout_t; //定时器超出值 /* 定时器超时回调函数 */ rt_err_t timeout_cb(rt_device_t dev, rt_size_t size) { rt_kprintf("this is hwtimer timeout callback fucntion!\n"); return 0; } int hw_sample(void) { rt_err_t ret = RT_EOK; /* 查找设备 */ hw_dev = rt_device_find("timer1"); if(hw_dev == RT_NULL) { rt_kprintf("find %s failed\t\n", "timer1"); return RT_ERROR; } /* 查找设备成功 */ rt_kprintf("find %s success \t\n","timer1"); /* 以读写的方式打开设备 */ rt_device_open(hw_dev, RT_DEVICE_OFLAG_RDWR); /* 设置定时器工作模式为周期定时 */ mode = HWTIMER_MODE_PERIOD; rt_device_control(hw_dev, HWTIMER_CTRL_MODE_SET, &mode); /* 超值回调函数 */ rt_device_set_rx_indicate(hw_dev, timeout_cb); /* 配置超时值 */ timeout_t.sec = 5; timeout_t.usec = 0; rt_device_write(hw_dev, 0, &timeout_t, sizeof(timeout_t)); return RT_EOK; } INIT_APP_EXPORT(hw_sample); ``` ## 4.总结 RT-Thread的系统时钟,使用timer0,精度为1ms。因此,在使用硬件定时器时,不能使用定时器0.
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
JiangYangJie
这家伙很懒,什么也没写!
文章
7
回答
0
被采纳
0
关注TA
发私信
相关文章
1
rt_thread studio 啥时候能用呢
2
RT_Thread使用反馈帖子
3
RTT studio 下的 AT指令问题。
4
什么时候RTT Sdudio支持Ubuntu,Deepin和UOS操作系统
5
rt thread Studio 关于J-LINK下载问题
6
RT-Thread studio 调试设置问题
7
RTT-Studio 如何设置调试配置参数?
8
rt_thread studio 软件包配置
9
RT-Studio目前只能开发STM32的项目吗?
10
rtt studio 生成hex名字修改
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
I2C_IIC
UART
ESP8266
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
编译报错
socket
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
RTT_逍遥
10
个答案
3
次被采纳
xiaorui
3
个答案
3
次被采纳
踩姑娘的小蘑菇
6
个答案
2
次被采纳
winfeng
2
个答案
2
次被采纳
三世执戟
8
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
lizimu
2
篇文章
9
次点赞
jinchanchan
2
篇文章
2
次点赞
alight
1
篇文章
5
次点赞
swet123
1
篇文章
4
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部