慕容雪花 发表于 2023-8-19 12:16

【Microchip WBZ451 Curiosity】-5- 增加硬件UART

本帖最后由 慕容雪花 于 2023-8-20 14:14 编辑

<p>UART是一种非常常用的通用异步收发协议,自己在找资料的过程中,发现了Microchip强大的文档,链接如下。</p>

<p>Universal Asynchronous Receiver Transmitter (UART) module <a href="https://onlinedocs.microchip.com/pr/GUID-167CA20A-2C0F-4CBC-A693-9FD032B9B193-en-US-1/index.html?GUID-C8B83E54-0F62-4205-98DD-B1560AACDBB4" target="_blank">https://onlinedocs.microchip.com/pr/GUID-167CA20A-2C0F-4CBC-A693-9FD032B9B193-en-US-1/index.html?GUID-C8B83E54-0F62-4205-98DD-B1560AACDBB4</a></p>

<p>&nbsp;</p>

<p><span style="font-size:20px;"><strong>一、硬件原理</strong></span></p>

<p>WBZ451好奇开发板使用了一颗Microchip公司的MCP2200来把上位机的USB报文转成UART报文,这样就实现了电脑与开发板的通讯。这颗芯片支持的UART波特率在300~1000 kbps.</p>

<p>电路原理图如下。</p>

<p> &nbsp;</p>

<p>其中,MCPD_N与MCPD_P为USB-和USB+信号;RTS, RX, TX,CTS是UART信号;GP0-GP7是MCP2200自带的8个GPIO,可以用来做个指示等用途。注意上图中MCP2200芯片的TX-RX, RX-TX,这种cross-couple的连接方法。因为上位机发送到USB -&gt; TX引脚7,WBZ451这边需要用一个RX引脚来连接。</p>

<p>&nbsp;</p>

<p>MCP2200转换好的UART信号,再经过4颗74LVC1T45芯片来控制信号方向:</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p>实际电路图:</p>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p>上图中VCP-UART连接到就是开发板核心模块WBZ451PE模组的如下UART相关引脚。这些引脚需要知MCC图形化配置工具中进行配置。</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p><span style="font-size:20px;"><strong>二、代码编写</strong></span></p>

<p>首先还是先启动MCC配置工具,点击finish后,耐心等待。</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p>进入MCC后,在左侧设备资源树中,找到Peripheral-&gt;SERCOM-&gt; SERCOM0,点击+号,添加该外设到项目中。</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p>之后再添加一个:Console System Service</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p>生成代码:</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p>现在遇到的问题是烧录后串口助手打印是空的,还在寻找问题原因。</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p><strong><span style="color:#2ecc71;"><span style="font-size:18px;">2023-08-20:问题解决!</span></span></strong></p>

<p>原因:默认串口0的工作模式是PPS,这个需要知Pin Configuration里面把UART的收发引脚配置一下,我之前的工作忽略了这一部分。其实更简单的方式是选择Direct Mode。</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p>还发现一个小技巧:就是使用strlen来自动计算UART传输字符的个数。</p>

<pre>
<code>SERCOM0_USART_Write((uint8_t *)"Inside APP_Tasks: GAP INIT", strlen("Inside APP_Tasks: GAP INIT"));</code></pre>

<p>在代码中,添加一个串口打印:</p>

<pre>
<code>void APP_Tasks ( void )
{
    APP_Msg_T    appMsg;
    APP_Msg_T   *p_appMsg;
    p_appMsg=appMsg;

    /* Check the application's current state. */
    switch ( appData.state )
    {
      /* Application's initial state. */
      case APP_STATE_INIT:
      {
            bool appInitialized = true;
            //appData.appQueue = xQueueCreate( 10, sizeof(APP_Msg_T) );
            APP_BleStackInit();
            // Start Advertisement
            //https://onlinedocs.microchip.com/pr/GUID-C5EAF60E-9124-427C-A0F1-F2DBE662EA92-en-US-1.2.1/index.html?GUID-C4D5F735-FEC4-4FA5-A778-C997D5A536AE
            //Parameter        Description
            // enable        Advertising control option.
            // duration        Duration for advertising. (Unit: 10 ms) Set to 0 to continuously advertise
            BLE_GAP_SetAdvEnable(0x01, 0x00);
            //printf("\r\n BLE GAP ENabale. Begin to advertise!");
            SERCOM0_USART_Write((uint8_t *)"Inside APP_Tasks: GAP INIT", strlen("Inside APP_Tasks: GAP INIT"));</code></pre>

<p>&nbsp;</p>

<p>之后编译,下载:</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p>又找回了之前的Microchip的烧录工具:</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p>还有一个步骤:拔掉USB,然后重新插上。打开串口工具TeraTerm:</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p>至此,串口UART打印功能ok。</p>

<p>&nbsp;</p>

<p><strong><span style="font-size:18px;">参考资料:</span></strong></p>

<p>1. MCP2200 Datasheet:&nbsp;<a href="https://ww1.microchip.com/downloads/aemDocuments/documents/APID/ProductDocuments/DataSheets/MCP2200-USB-2.0-to-UART-Protocol-Converter-with-GPIO-DS20002228E.pdf" target="_blank">https://ww1.microchip.com/downloads/aemDocuments/documents/APID/ProductDocuments/DataSheets/MCP2200-USB-2.0-to-UART-Protocol-Converter-with-GPIO-DS20002228E.pdf</a></p>

<p>2.&nbsp;74LVC1T45 Datasheet: <a href="https://www.diodes.com/assets/Datasheets/74LVC1T45.pdf" target="_blank">https://www.diodes.com/assets/Datasheets/74LVC1T45.pdf</a></p>

慕容雪花 发表于 2023-8-20 15:27

<p>不得不吐槽一下mplabx ide的烧录,时好时坏,早上还有问题,过了2h,又好了。。。。。。。</p>

swzswz 发表于 2023-8-27 15:12

慕容雪花 发表于 2023-8-20 15:27
不得不吐槽一下mplabx ide的烧录,时好时坏,早上还有问题,过了2h,又好了。。。。。。。

<p>烧录我用的pde工具,这个IDE确实不咋行</p>

慕容雪花 发表于 2023-8-28 09:03

swzswz 发表于 2023-8-27 15:12
烧录我用的pde工具,这个IDE确实不咋行

<p>好像是基于netbean...............一言难尽啊</p>
页: [1]
查看完整版本: 【Microchip WBZ451 Curiosity】-5- 增加硬件UART