请教ESP32 IDF4.1 RMT产生红外脉冲的问题
Posted: Sat May 23, 2020 12:30 pm
我在使用IDF 4.1 的RMT模块时,先按照例子的方式配置了接收和发送代码,使用另外的红外发生器发送代码到开发板上,然后将接收到的数据,反向发送出来,红外示波器看起来,丢掉了大约一半的脉冲时间,从接收到的原始数据来看,每个rmt_item32_t中的duration0和duration1 折算成时间值,似乎都只有实际发送的1/2左右。
这是为什么呢?
我的Ticks时间计算是按照,80Mhz/CLK_DIV/1000,000 计算的。
接收代码如下:
这是为什么呢?
我的Ticks时间计算是按照,80Mhz/CLK_DIV/1000,000 计算的。
接收代码如下:
Code: Select all
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;
}
}