完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我在使用IDF 4.1 的RMT模块时,先按照例子的方式配置了接收和发送代码,使用另外的红外发生器发送代码到开发板上,然后将接收到的数据,反向发送出来,红外示波器看起来,丢掉了大约一半的脉冲时间,从接收到的原始数据来看,每个rmt_item32_t中的duration0和duration1 折算成时间值,似乎都只有实际发送的1/2左右。
这是为什么呢? 我的Ticks时间计算是按照,80Mhz/CLK_DIV/1000,000 计算的。 接收代码如下: rmt_item32_t rmt_rx_data[1000];........ rmt_config_t rmt_rx_config = RMT_DEFAULT_CONFIG_RX(GPIO_NUM_35, RMT_CHANNEL_0); // 这里的CLK_DIV为80,filter_ticks_thresh=100 ,idle_threshold=12000 rmt_config(&rmt_rx_config); rmt_driver_install(RMT_CHANNEL_0, 1000, 0); //get RMT RX ringbuffer rmt_get_ringbuf_handle(RMT_CHANNEL_0, &rb); // Start receive rmt_rx_start(RMT_CHANNEL_0, true); while (rb&&!is_stop) { items = (rmt_item32_t *) xRingbufferReceive(rb, &length, 1000); if (items) { rmt_rx_data_size=length; memcpy(rmt_rx_data, items, length); vRingbufferReturnItem(rb, (void *) items); } else { break; } } |
|
相关推荐
1个回答
|
|
您遇到的问题可能是由于以下几个原因导致的:
1. 时钟分频器(CLK_DIV)设置不正确:确保您的CLK_DIV设置正确,以便在接收和发送数据时获得准确的脉冲宽度。您可以根据实际需求调整CLK_DIV值。 2. 数据接收不准确:在接收数据时,可能由于信号干扰或其他原因导致接收到的数据不准确。请检查您的硬件连接和信号质量。 3. RMT配置问题:请确保您的RMT配置正确,包括通道选择、接收/发送模式等。 4. 红外示波器精度问题:红外示波器可能存在一定的测量误差,导致您观察到的脉冲时间丢失。 为了解决这个问题,您可以尝试以下步骤: 1. 检查您的CLK_DIV设置,确保它与您的时钟频率和所需的脉冲分辨率相匹配。 2. 检查硬件连接和信号质量,确保红外信号在接收过程中没有受到干扰。 3. 仔细检查您的RMT配置,确保所有参数都设置正确。 4. 如果可能,请尝试使用其他红外示波器或测量工具来验证您的结果。 |
|
|
|
只有小组成员才能发言,加入小组>>
486 浏览 1 评论
552浏览 6评论
461浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
443浏览 5评论
445浏览 4评论
415浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 21:14 , Processed in 0.672639 second(s), Total 81, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号