jinglixixi 发表于 2024-11-2 13:03

【翌创ET6001测评】串口通讯与MP3播放模块控制

<p>由资料可知ET6001配有8个UART,借助UART不但可以实现串行通讯,还可以控制具有相应功能的串口设备,如串口屏、双PWM调节模块、超声波测距仪、温度调控器、数据记录模块等。</p>

<p >&nbsp;</p>

<p >为便于使用,这里是用J9接口的UART0来控制一款具有串口控制功能的MP3播放模块。</p>

<p >&nbsp;</p>

<p > &nbsp;</p>

<p>图1 J9接口</p>

<p >&nbsp;</p>

<p >在具体实现MP3播放模块控制前,先要解决UART0的数据发送功能。</p>

<p >由于MP3播放模块的波特率9600bps,故&nbsp;UART0的初识化函数为:</p>

<pre>
<code class="language-cpp">static void UART0_init(void)
{
    UART_InitTypeDef init;
        init.baudRate         = 9600;
    init.wordLength       = UART_WORDLENGTH_8B;
    init.stopBits         = UART_STOPBITS_1;
    init.parity         = UART_PARITY_NONE;
    init.mode             = UART_MODE_NORMAL;
    init.DMAMode          = UART_DMA_MULTI_MODE;
    init.irqEnableFlag    = UART_IT_NONE;
    init.hwFlowCtl      = UART_HWFLOW_DISABLE;
    init.TXFIFOThreshold= UART_TXFIFO_THRESHOLD_0BYTES;
    init.RXFIFOThreshold= UART_RXFIFO_THRESHOLD_1BYTES;
    UART_Init(UART0, &amp;init);
}</code></pre>

<p>&nbsp;</p>

<p>为进行串口发送字节指令的测试,其主程序为:</p>

<pre>
<code class="language-cpp">uint8_t zl={0x7E,0xFF,0x06,0x03,0x00,0x00,0x01,0xFE,0xF7,0xEF};
int main(void)
{
          int n=1;
      UART0_init();
                UART_Transmit(UART0, zl, 10, BLOCK_TRANSMIT_FIFO);
      while (1);
}</code></pre>

<p>&nbsp;</p>

<p>其中,数组zl中存放放的是一条播放指令,共有10个字节。</p>

<p >&nbsp;</p>

<p >为测试串口的字节发送功能,需将UART0与USB转TTL模块相连,然后通过串口调试工具进行观察;</p>

<p >&nbsp;</p>

<p >经程序的编译和运行,其结果如图1所示,说明字节指令发送有效。</p>

<p >&nbsp;</p>

<p > &nbsp;</p>

<p>图1 串口测试</p>

<p >&nbsp;</p>

<p >在此基础上,为了能够顺序的播放每一首歌曲,特在引脚GPIO2_3上了解一个触摸按键。</p>

<p >&nbsp;</p>

<p >对触摸按键所用引脚的初始化函数为:</p>

<pre>
<code class="language-cpp">static void KEY_Init(void)
{
    IOC_Init_TypeDef init;
    IOC_ConfigStructInit(&amp;init);
    init.mode = IOC_AF_MODE_3;
    init.dir = GPIO_DIR_IN_OUT;
    init.pull = IOC_PULL_UP;
    IOC_Config(IOC_PIN_GPIO_PLL_REF, &amp;init);
    GPIO_PortOutputDisable(GPIO2, GPIO_PIN_03);
}</code></pre>

<p>&nbsp;</p>

<p>这样就可以通过触摸按键来控制播放内容,即每触动一次按键,就自动指向下一首歌曲来播放。</p>

<p >&nbsp;</p>

<p >实现MP3播放控制的主程序为:</p>

<pre>
<code class="language-cpp">int main(void)
{
          int n=1;
      UART0_init();
                KEY_Init();
      while (1)
                {
                          if(GPIO_ReadPin(GPIO2, GPIO_PIN_03)==SET)
                          {
                                          n=n+1;
                                          playn(n);
                                          UART_Transmit(UART0, zl, 10, BLOCK_TRANSMIT_FIFO);
                          }
                          delay(1000);
                }
}</code></pre>

<p>&nbsp;</p>

<p>其中,函数&nbsp;playn()的功能是将n的计数值转换为相应的播放控制指令。</p>

<p >&nbsp;</p>

<p >经程序的编译和运行,其结果如图2所示,按键按键控制有效,能自动形成相应的播放指令。</p>

<p > &nbsp;</p>

<p>图2 测试效果</p>

<p >&nbsp;</p>

<p >这样在连接MP3播放模块的情况下,就可以播放音乐了。</p>

<p >&nbsp;</p>

<p >MP3播放模块的引脚分布如图3所示。</p>

<p > &nbsp;</p>

<p>图3&nbsp;引脚分布</p>

<p >&nbsp;</p>

<p >在最简单的使用情况下,需连接电源及将SPK_1和SPK_2接到扬声器外,只将RX引脚接到开发板的UART_TXD引脚即可。</p>

<p >&nbsp;</p>

<p >此外,通过串口还可相数据记录模块发送数据以供记录。</p>

<p >这里所说的数据记录模块是一种串口设备,其工作波特率为9600bps,在接收到开发板所发送的数据时,就将数据完整地记录到TF卡的文件中。在结束数据记录后,通过读取TF卡可见到相应的记录文件,其文件名由urc+数字串构成。以NTC温度检测的记录文件文件为例,其形式如图4所示。</p>

<p >&nbsp;</p>

<p > &nbsp;</p>

<p>图4 记录形式</p>

<p>&nbsp;</p>

秦天qintian0303 发表于 2024-11-2 23:17

<p>8通道的UART,这接口确实算多的,一般也就4个左右&nbsp;&nbsp;</p>

Jacktang 发表于 2024-11-3 08:30

<p>数据记录模块是一种串口设备,其工作波特率为9600bps,在接收到开发板所发送的数据时,就将数据完整地记录到TF卡的文件中,是这样</p>

jinglixixi 发表于 2024-11-3 08:33

秦天qintian0303 发表于 2024-11-2 23:17
8通道的UART,这接口确实算多的,一般也就4个左右&nbsp;&nbsp;

<p>的确是这样</p>
页: [1]
查看完整版本: 【翌创ET6001测评】串口通讯与MP3播放模块控制