Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Numaker-IoT-M487
timer
【开发板评测】Numaker-IoT-M487开发板之Timer
发布于 2022-05-01 19:36:46 浏览:525
订阅该版
#1、Timer详解 1)Numaker-lot-M487有4个32位精度的时钟,Timer0到Timer3,每个时钟存在24位的向上计数器和8位的预分频器。 2)每个定时器的独立时钟源 3)提供单次、周期、外部触发和连续计数操作模式 4)24位向上计数器值,可通过CNT寄存器进行读取(TIMERx_CNT[23:0]) 5)支持事件计数功能 6)24位捕获值可通过CAPDAT寄存器进行读取(TIMERx_CAP[23:0]) 7)支持引脚外部捕获事件的间隔测量 8)支持外部捕获引脚事件复位24位计数器 9)Idle/Power-down模式下如定时器中断信号产生可进行芯片唤醒 10)支持Timer0 ~ Timer3的超时中断信号或捕获中断信号来触发EPWM, BPWM, QEI, EADC, DAC和PDMA功能 11)支持内部捕获触发,同时内部ACMP输出信号转换 12)支持内部时钟(HIRC、LIRC)和外部时钟(HXT、LXT),用于捕获事件 13)支持Inter-Timer触发方式 13)支持从内部USB SOF信号事件计数源 #2、测试内容 本次测试Timer0的周期定时+ADC读取功能。 即每5s读取一次ADC0通道0的ADC值。 #3、测试代码 ``` #define REFER_VOLTAGE 330 /* 参考电压 3.3V,数据精度乘以100保留2位小数*/ #define CONVERT_BITS (1 << 12) /* 转换位数为12位 */ #define TIMER_DEV_NAME "timer0" /* 定时器名称 */ rt_device_t tim_dev; /* 定时器设备句柄 */ rt_hwtimer_mode_t tim_mode; /* 定时器模式 */ rt_hwtimerval_t timeout_s; /* 定时器超时值 */ #define ADC_DEV_NAME "eadc0" /* ADC 设备名称 */ #define ADC_DEV_CHANNEL 0 /* ADC 通道 */ rt_adc_device_t adc_dev; /* ad设备句柄 */ rt_uint32_t value = 0; /* 定时器超时回调函数 */ static rt_err_t timeadc_cb(rt_device_t dev, rt_size_t size) { rt_uint32_t vol = 0; /* 使能设备 */ rt_adc_enable(adc_dev, ADC_DEV_CHANNEL); /* 读取采样值 */ value = rt_adc_read(adc_dev, ADC_DEV_CHANNEL); /* 转换为对应电压值 */ vol = value * REFER_VOLTAGE / CONVERT_BITS; rt_kprintf("this is hwtimer timeout callback fucntion!\n"); rt_kprintf("the voltage is :%d.%02d \n", vol / 100, vol % 100); rt_kprintf("tick is :%d !\n", rt_tick_get()); /* 关闭通道 */ rt_adc_disable(adc_dev, ADC_DEV_CHANNEL); return 0; } static int timer_adc(int argc, char *argv[]) { /* 查找定时器设备 */ tim_dev = rt_device_find(TIMER_DEV_NAME); /* 以读写方式打开设备 */ rt_device_open(tim_dev, RT_DEVICE_OFLAG_RDWR); /* 设置超时回调函数 */ rt_device_set_rx_indicate(tim_dev, timeadc_cb); /* 设置模式为周期性定时器 */ tim_mode = HWTIMER_MODE_PERIOD; rt_device_control(tim_dev, HWTIMER_CTRL_MODE_SET, &tim_mode); /* 设置定时器超时值为5s并启动定时器 */ timeout_s.sec = 5; /* 秒 */ timeout_s.usec = 0; /* 微秒 */ rt_device_write(tim_dev, 0, &timeout_s, sizeof(timeout_s)); /* 查找ad设备 */ adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME); return 0; } MSH_CMD_EXPORT(timer_adc, time function); ``` #4、结果 在FINSH控制台下,查看设备,Timer例程的Mesh命令已经出现。 ![1.png](https://oss-club.rt-thread.org/uploads/20220501/e19c9b0f128c3425000c7c470a8b991f.png) 输入timer_adc指令后,激活每5s读取一次ADC值并转换为电压值。 ![2.png](https://oss-club.rt-thread.org/uploads/20220501/2ec46d23dbb78c81ce4af72c807a6461.png) ![3.png](https://oss-club.rt-thread.org/uploads/20220501/fbc35168caa870ad8d44538607a36668.png) 每隔5s打印一次检测到的电压值。 #5、例程代码 [例程代码](https://gitee.com/werper/nu-maker-m487_-test/tree/master)
1
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
werper
叫我点灯大师
文章
9
回答
17
被采纳
1
关注TA
发私信
相关文章
1
不同的pwm能否使用同一个timer的不同channel?
2
硬件定时器的问题咨询
3
hard fault on thread: timer
4
NANO移植finsh会导致启动时卡死在rt_object_init
5
rt_timer_start 链表死循环
6
定时器 rt_timer_init 里超时时间无效
7
timer文件的源码分析
8
定时器API bug反馈
9
关于RT-Thread中的软定时器使用疑问请教
10
rt_timer_detach脱离定时器后,定时器还在执行
推荐文章
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
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
10
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
YZRD
2
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部