[国民技术N32WB452测评]三.硬件触控调试及DVP采集图像
本帖最后由 Eurasia32 于 2022-7-31 00:06 编辑<ol>
<li>TSC(触摸传感器控制)
<ol>
<li>N32WB452所带TSC支持电容式触控功能,最大支持18通道,各通道课单独使能。在该开发板上带有四个触控按键,为TSC Channel 16-19,分别对应PC10-12和PD2。 </li>
<li>在开发板所附SDK中提供了底层驱动,用户开发时只需关注顶层函数的调用与实现即可。</li>
<li>触控的主要实现流程如下:
<ol>
<li>定义并实现回调函数(tsc_alg_isr_callback())</li>
<li>使用tsc_alg_need_sramsize()函数获取SRAM资源大小以及BUF</li>
<li>定义并实现初始化函数,其中包括TIMER,通道列表等的初始化,以及tsc_alg_init()函数与tsc_alg_start()函数的调用</li>
<li>当有触摸时调用回调函数,实现其中定义功能</li>
</ol>
</li>
<li>运行例程: \examples\TSC\TSC_Lib_demo
<ol>
<li>回调函数实现:
<pre>
<code>int32_t tsc_alg_isr_callback(tsc_alg_type type, uint32_t event, uint32_t chn, uint32_t value)
{
// uint32_t wakeup_type;
uint8_t cnt = 0;
if (type == TSC_ALG_BUTTON_TYPE)
{
if (event == TSC_PRESS_KEY_NORMAL) {//正常按键操作
for (cnt = 0; cnt < 4; cnt++)
{
if (chn == gtsc_list.chn)
{
log_debug("Key [%x] press %d\r\n", gtsc_list.chn, value);
if (value)
{
GPIO_SetBits(LedPort,LedPin);
}
else
{
GPIO_ResetBits(LedPort,LedPin);
}
}
}
}
}
return TSC_SUCCESS;
}</code></pre>
</li>
<li>初始化函数定义及实现(包括获取sram大小):
<pre>
<code>int32_t app_touch_init(void)
{
int32_t ret;
uint32_t totals_chn, size;
TSC_AlgInitTypeDef TSC_AlgStructure = {0};
//获取总通道数
totals_chn = sizeof(gtsc_list) / sizeof(gtsc_list);
//打印触控算法版本
log_info("tsc version = %s.\r\n", tsc_alg_get_version());
//判断通道数所需要的SRAM资源是否足够
size = tsc_alg_need_sramsize(totals_chn);
if(!size)
{
log_error("Get ram size error!\r\n");
return TSC_SOURCE_NOT_ENOUGH_ERR;
}
else if(sizeof(TscKey.sram) < size)
{
log_error("Sram is too small,(%d)chn need ram %d,but support size is %d\r\n",totals_chn, size, sizeof(TscKey.sram));
return TSC_SOURCE_NOT_ENOUGH_ERR;
}
else
{
log_info("tsc_alg_need_sramsize ok:size=%d\r\n",size);
}
//初始化触控模块及BUF
TSC_AlgStructure.TIMx = TIM2;
TSC_AlgStructure.DMAyChx = DMA1_CH5;
TSC_AlgStructure.DMARemapEnable = 1;
TSC_AlgStructure.pTScChannelList = (TSC_AlgInitThreValue*)gtsc_list;
TSC_AlgStructure.AutoCalibrateTimer = 1000; //覆盖物的自动校准时间1000ms
TSC_AlgStructure.ResistDisturbLev = TSC_RESIST_DIS_LEV0; //抗干扰等级。装配成品后建议加亚克力,并配置为TSC_RESIST_DIS_LEV1
TSC_AlgStructure.pTscSramAddr = (uint8_t*)(TscKey.sram);
TSC_AlgStructure.TscSramSize = sizeof(TscKey.sram);
#ifdef THRE_TOUCHDATA_DEBUG //监控模式下设定log缓存空间
TSC_AlgStructure.LogBuf = (uint16_t*)(TscKey.LogBuf);
TSC_AlgStructure.LogBufSize = sizeof(TscKey.LogBuf) / sizeof(TscKey.LogBuf);
#endif
TSC_AlgStructure.Stop2Data = (uint8_t *)gTscStop2Data;
TSC_AlgStructure.Stop2DataSize = sizeof(gTscStop2Data);
ret = tsc_alg_init(&TSC_AlgStructure);
if (ret != TSC_SUCCESS)
{
log_error( "tsc_alg_init errcode = %x.\r\n", ret);
return ret;
} else {
log_info("tsc_alg_init ok.\r\n");
}
//启动触控开始工作
ret = tsc_alg_start();
if (ret != TSC_SUCCESS)
{
log_error( "errcode = %x.\r\n", ret);
return ret;
}
else
{
log_info("tsc_alg_start ok.\r\n");
}
return ret;
}</code></pre>
<p> </p>
</li>
<li>编译并运行后,从串口调试助手可以看到运行结果,同时观察开发板上LED亮灭情况可以得知对应关系如下:T3-D1,T4-D10,T5-D11,T6-D12,串口助手情况如下图:
<p style=""></p>
<p style=""></p>
<p style="">由此看出该例程运行正常。</p>
<p> </p>
</li>
</ol>
</li>
</ol>
</li>
<li>DVP
<ol>
<li style="">该开发板提供了一个DVP接口,可以用于外接摄像头。</li>
<li style="">例程: \examples\DVP\Camera
<ol>
<li>
<p style="">该例程实现了驱动GC0803摄像头并通过DMA控制器传输读取数据,由于手头暂时没有LCD屏幕,故仅观察串口调试助手,正常工作时每隔约1s会将采集一次摄像头数据并输出提示信息。</p>
<p style="">编译并运行后,打开串口调试助手,可以看到如下界面:</p>
<p style=""> </p>
<p style="">说明摄像头运行正常。</p>
</li>
</ol>
</li>
</ol>
</li>
<li>总结</li>
</ol>
<p> 本次测试共测试了该开发板的TSC与DVP,均成功地运行了相关例程,下次测试将主要着眼于通过LCD显示DVP采集图片,并使用触控功能实现控制输出图像色彩等功能。 </p>
<p> </p>
<ul>
</ul>
<p>开发板提供有DVP接口,挂个外接摄像头不错</p>
<p> </p>
页:
[1]