之前没用过RMT,用笨办法SPI做发送实验《ESP32用SPI产生任意个数脉冲的方法》,虽然也成功了,但是缺点还有很多,毕竟不是专们的硬件,有些浪费资源,这两天学习RMT,发现非常适合这方面的应用,网上的例程大多数是在ESP-IDF环境下的,Arduino比较少,AI给出的答案也五花八门,通过学习摸索,编写了如下程序,可以正常工作,还以发送131个脉冲为例:

static rmt_data_t gclk_data[131] = {0};  //RMT数据
static rmt_obj_t *rmt_obj = nullptr;     //RMT对象


//初始化RMT------------------------
rmt_obj = rmtInit(GCLK, RMT_TX_MODE, RMT_MEM_192 );
rmtSetTick(rmt_obj, 50);  // 50ns
//---------------------------------

//设置需要发送的数据-----------------
for (int col = 0; col < 131; col++) 
{
   gclk_data[col].level0 = 1;     // 
   gclk_data[col].duration0 = 2;  //高电平宽度
   gclk_data[col].level1 = 0;     // 
   gclk_data[col].duration1 = 2;  //低电平宽度
}

   gclk_data[130].level0 = 1;     // 
   gclk_data[130].duration0 = 2;  // 高电平宽度 
   gclk_data[130].level1 = 0;     // 结束符
   gclk_data[130].duration1 = 0;  // 
//----------------------------------

//发送脉冲---------------------------
while(1)
{
   rmtWriteBlocking(rmt_obj, gclk_data,sizeof(gclk_data));
}
//----------------------------------

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐