[ ST NUCLEO-U575ZI-Q 测评]+ 以指令方式控制LED灯
本帖最后由 jinglixixi 于 2023-1-4 08:45 编辑<p>为了给后续的设计的检查,先测试一下以指令方式控制LED灯。</p>
<p>开发板上有红绿蓝3个LED灯,为控制它们的亮灭,这里也为它们分配了3个指令,并存放在数组中,其指令内容如下:</p>
<p>uint8_t aTxBuffer1[] = {0x74,0x31,0xff,0xff,0xff};</p>
<p>uint8_t aTxBuffer2[] = {0x74,0x32,0xff,0xff,0xff};</p>
<p>uint8_t aTxBuffer3[] = {0x74,0x33,0xff,0xff,0xff};</p>
<p> </p>
<p>接收的指令也被存放到数组中,其定义为:</p>
<p>uint8_t aRxBuffer;</p>
<p> </p>
<p>其控制的主程序如下:</p>
<pre>
<code class="language-cpp">int main(void)
{
HAL_Init();
SystemClock_Config();
SystemPower_Config();
MX_GPIO_Init();
MX_ICACHE_Init();
MX_USART2_UART_Init();
BSP_LED_Init(LED1);
BSP_LED_Init(LED2);
BSP_LED_Init(LED3);
BSP_LED_Off(LED1);
BSP_LED_Off(LED2);
BSP_LED_Off(LED3);
while (1)
{
HAL_UART_Receive(&huart2, (uint8_t *)aRxBuffer, 5, 5000);
if (Buffercmp((uint8_t *)aTxBuffer1, (uint8_t *)aRxBuffer, 5)==0)
{
BSP_LED_On(LED1);
BSP_LED_Off(LED2);
BSP_LED_Off(LED3);
}
if (Buffercmp((uint8_t *)aTxBuffer2, (uint8_t *)aRxBuffer, 5)==0)
{
BSP_LED_On(LED2);
BSP_LED_Off(LED1);
BSP_LED_Off(LED3);
}
if (Buffercmp((uint8_t *)aTxBuffer3, (uint8_t *)aRxBuffer, 5)==0)
{
BSP_LED_On(LED3);
BSP_LED_Off(LED1);
BSP_LED_Off(LED2);
}
aRxBuffer = 0x30;
}
}
</code></pre>
<p> </p>
<p>经程序的编译下载,即可提供串口调试工具来向开发板发送指令,其界面如图1所示。</p>
<p></p>
<p>图1 发送指令</p>
<p> </p>
<p>相应的控制效果如图2至图4所示,其中t1指令用来点亮绿色LED,t2指令用来点亮蓝色LED,t3指令用来点亮红色LED。</p>
<p> 图2 点亮LED1</p>
<p> 图3 点亮LED2</p>
<p> 图4 点亮LED3 </p>
<p> </p>
<p>这个牛哦,我还没有搞定DMA不定长接收。DMA不定长中断可以实现吗?</p>
lugl4313820 发表于 2023-1-3 13:28
这个牛哦,我还没有搞定DMA不定长接收。DMA不定长中断可以实现吗?
<p>我也没试过,应该可以,需要添加标识符来辅助处理。</p>
lugl4313820 发表于 2023-1-3 13:28
这个牛哦,我还没有搞定DMA不定长接收。DMA不定长中断可以实现吗?
<p>串口DMA不定长数据接收一般通过串口空闲中断实现,也可以通过标志符,不过还是空闲中断比较好用</p>
<p>测评汇总:免费申请|ST NUCLEO-U575ZI-Q https://bbs.eeworld.com.cn/thread-1228653-1-1.html</p>
页:
[1]