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

【CuriosityNano测评报告】03.串口通讯实验及I2C驱动DS1307日历...

[复制链接]
21087|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hu9jj|  楼主 | 2021-8-27 11:09 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
#申请原创#

    一、串口通讯实验

    配置串口比较简单,进入MCC,添加UART1,选择RB5为RX,RB7为TX:


    配置UART的速率为9600,并选择Redirect STDIO to UART,这样就方便直接使用printf函数通过串口发送数据:


    生成代码后,在main函数中添加printf命令,我是在主循环之前先发送“开始运行!”,然后在主循环中每秒发送一次“串口通讯测试!”:


    下面是运行时通过串口通讯助手获得的测试结果:


    二、I2C通讯实验

    本次I2C通讯是在前次PIC18F16Q40核心板测试的基础上进行的,使用的是硬件I2C,参考MCC生成的i2c_master_example.c代码写成的针对8位寄存器地址多字节写操作以及16位寄存器地址的单字节和多字节的读写操作函数:


    添加的函数代码如下:
///////////////添加的测试函数
void I2C_8addrBuffWrite(i2c1_address_t address, uint8_t reg, uint8_t *data, uint8_t len)   //8位地址多字节写
{
    uint8_t i,Buffer[20];
    Buffer[0] = reg;
    for(i=1; i<(len+1); i++){
        Buffer[i] = data[i-1];
    }
    i = i + 1;
   
    while(!I2C1_Open(address));             // sit here until we get the bus..
    I2C1_SetBuffer(Buffer,i);
    I2C1_SetAddressNackCallback(NULL,NULL); //NACK polling?
    I2C1_MasterWrite();
    while(I2C1_BUSY == I2C1_Close());       // sit here until finished.
}

uint8_t I2C_16addr_ByteRead(i2c1_address_t address, uint16_t reg)
{
    uint8_t dat = 0x00;
    uint16_t addr = reg<<8 | reg>>8;
   
    while(!I2C1_Open(address));                               // 打开I2C设备.
    I2C1_SetDataCompleteCallback(rd1RegCompleteHandler,&dat); // 传递数据指针
    I2C1_SetBuffer(&addr,2);                                  // 指定数据地址
    I2C1_SetAddressNackCallback(NULL,NULL);                   // 等待应答
    I2C1_MasterWrite();
    while(I2C1_BUSY == I2C1_Close());                         // 等待操作结束
   
    return dat;
}

void I2C_16addr_BuffRead(i2c1_address_t address,uint16_t reg,uint8_t *data,uint8_t len)
{
    uint16_t addr;
   
    addr = reg<<8 | reg>>8;
   
    i2c1_buffer_t bufferBlock; // result is little endian
    bufferBlock.data = data;
    bufferBlock.len = len;

    while(!I2C1_Open(address)); // sit here until we get the bus..
    I2C1_SetDataCompleteCallback(rdBlkRegCompleteHandler,&bufferBlock);
    I2C1_SetBuffer(&addr,2);
    I2C1_SetAddressNackCallback(NULL,NULL); //NACK polling?
    I2C1_MasterWrite();
    while(I2C1_BUSY == I2C1_Close()); // sit here until finished.
   
}


void I2C_16addr_ByteWrite(i2c1_address_t address,uint16_t reg,uint8_t data)
{
    uint8_t Buffer[3];
    Buffer[0] = reg>>8;
    Buffer[1] = reg;
    Buffer[2] = data;

    while(!I2C1_Open(address));             // 打开I2C器件
    I2C1_SetBuffer(Buffer,3);               // 写入3个字节数据(地址2+数据1)
    I2C1_SetAddressNackCallback(NULL,NULL); // NACK polling?
     I2C1_MasterWrite();
    while(I2C1_BUSY == I2C1_Close());       // 等待写操作完成
   
}


void I2C_16addr_BuffWrite(i2c1_address_t address, uint16_t reg, uint8_t *data, uint8_t len)
{
    uint8_t i,Buffer[20];
    Buffer[0] = reg>>8;                     // 地址高字节
    Buffer[1] = reg;                        // 地址低字节
    for(i=2; i<(len+2); i++){
        Buffer[i] = data[i-2];              // 将要写入的数据依次排列在数组后面
    }
    i = len + 2;
   
    while(!I2C1_Open(address));             // 打开I2C器件
    I2C1_SetBuffer(Buffer,i);               // 写入多个字节数据
    I2C1_SetAddressNackCallback(NULL,NULL); // NACK polling?
    I2C1_MasterWrite();
    while(I2C1_BUSY == I2C1_Close());       // 等待写操作完成
}



    有关I2C测试的过程可参考我的另一个帖子:https://bbs.21ic.com/icview-3138832-1-1.html

    MCC的配置如下,配置RB4为SDA,RB6为SCL:


    下面是DS1307日历模块驱动实验过程的照片:


    这是在显示屏显示的照片:


    这是测试的动画:



    下面是本次测试项目文件的压缩包:
Text2.X.rar (1.83 MB)

使用特权

评论回复
沙发
10299823| | 2021-9-4 13:49 | 只看该作者
这个是硬件iic吗   

使用特权

评论回复
板凳
jimmhu| | 2021-9-4 13:49 | 只看该作者
DS1307可以做万年历吗  

使用特权

评论回复
地板
lihuami| | 2021-9-4 13:50 | 只看该作者
现在配置程序简单多了。   

使用特权

评论回复
5
xiaoyaozt| | 2021-9-4 13:50 | 只看该作者
这个是直接生成代码吗   

使用特权

评论回复
6
uptown| | 2021-9-4 13:51 | 只看该作者
有内部带有RTC的芯片吗   

使用特权

评论回复
7
cehuafan| | 2021-9-4 13:51 | 只看该作者
为什么DS1307的RST在读取数据的时候就需要复位

使用特权

评论回复
8
sesefadou| | 2021-9-4 13:51 | 只看该作者
CuriosityNano的功能怎么样   

使用特权

评论回复
9
earlmax| | 2021-9-4 13:52 | 只看该作者
可以使用GPS进行授时的。      

使用特权

评论回复
10
alvpeg| | 2021-9-4 13:52 | 只看该作者
需要上拉电阻吗?      

使用特权

评论回复
11
primojones| | 2021-9-4 13:52 | 只看该作者
波特率配置简单多了。      

使用特权

评论回复
12
uptown| | 2021-9-4 13:52 | 只看该作者
              

使用特权

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

本版积分规则

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

151

主题

1059

帖子

11

粉丝