打印
[PIC®/AVR®/dsPIC®产品]

【CuriosityNano测评报告】+串口通讯实验

[复制链接]
1171|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hu9jj|  楼主 | 2020-12-3 15:46 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hu9jj 于 2020-12-3 15:50 编辑

    PIC18F57Q43共有5个USART,开始我准备测试虚拟串行端口,但反复尝试均无结果,只好改用USB转TTL模块来连通单片机与电脑。本次测试使用UART1串口,通过MMC配置RC2引脚为TX,RC3引脚为RX。

      生成代码之后,在UART1.h文件里面有轮询法的例子,可以直接复制到主循环中稍加修改进行测试:



    下面是我的测试代码:
if(UART1_is_rx_ready())
{
    Rx_Buff[0] = UART1_Read();                           //接收串口数据
    LCD_write_ASCII(recond++*6,5,1,Rx_Buff[0]);
    if(recond > 30)
         recond = 0;
    if(UART1_is_tx_ready())
    {
        UART1_Write(Rx_Buff[0]);                           //将接收到的数据发送回电脑
    }
}


    经过测试,在串口调试助手中发出字符串,只要长度不超过7个字符,就能正确地接收,超过7个字符时,串口调试助手接收到的字符就可能不完整:


    下面的测试时字符串不超过7个,接收到字符串都是完整的:


    轮询法测试完成后,开始进行中断法接收和发送。在UART1.c文件中,找到UART1_RxDataHandler函数,在里面加上发送的代码,就完成了将接收的数据发送回电脑,代码如下:
<blockquote>void UART1_RxDataHandler(void){
void UART1_RxDataHandler(void){
    // use this default receive interrupt handler code 使用这个默认的接收中断处理程序代码
    /*    uart1RxBuffer[uart1RxHead++] = U1RXB;
    if(sizeof(uart1RxBuffer) <= uart1RxHead)
    {
        uart1RxHead = 0;
    }
    uart1RxCount++;
    */
    Rx_Buff[recond++] = U1RXB;
    if(UART1_is_tx_ready()){
        UART1_Write(U1RXB);
    }
    if(recond > 31){
        recond = 0;
    }
}

    使用中断法就可以完整的接收到发送的字符串:


    那末如何获得完整的一次串口通讯数据呢?我根据需要定义了一个全局的32个下标的一维数组,在中断处理函数中取得了字符串之后,在主循环中进行处理,将接收到的数据显示在LCD屏幕上。下面是在主循环中相关的代码:
if(!UART1_is_rx_ready() & recond > 0){
    Rx_Buff[recond] = 0;  //置字符串结束标志
    LCD_write_value(120,6,3,0,1,recond);
    LCD_write_ASCII(0,6,1,Rx_Buff);
    for(i=0; i<32; i++){
        Rx_Buff[i] = 0;
    }
    recond = 0;


    下面是测试过程的照片,红线标注的是接收到的内容:


    串口通讯的测试至此结束。


使用特权

评论回复
沙发
MianQi| | 2020-12-3 18:03 | 只看该作者
“测试虚拟串行端口,但反复尝试均无结果”,是什么是意思呢?在Data Visualizer里看不到数据吗?如果在串口调试程序利用,要打开“DTR”,试了吗?

使用特权

评论回复
板凳
caigang13| | 2020-12-4 07:55 | 只看该作者
这个板子确实小强强悍。

使用特权

评论回复
地板
hu9jj|  楼主 | 2020-12-4 08:17 | 只看该作者
MianQi 发表于 2020-12-3 18:03
“测试虚拟串行端口,但反复尝试均无结果”,是什么是意思呢?在Data Visualizer里看不到数据吗?如果在串 ...

    是在串口测试助手里发送数据得不到回应,单片机这边也没有接收到数据。我设置的是UART3,引脚分别为RF0和RF1,不知是设置问题么。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:Microchip
简介:让我们来为您提供帮助。我们可提供各种资源来帮助您解决一切问题。是否需要与我们的客户支持团队联系?您可以通过电话、在线聊天功能或电子邮件与他们联系。

151

主题

1059

帖子

11

粉丝