杰理AC692X---串口发送奇偶校验位驱动TM1652

Author : Jim

微信:life5270

前段时间调试TM1652驱动LED数码管显示,我和朋友研究了一个下午,愣是没驱动起来。

最后寻找原厂技术支持发现是TM1652数据接收时,要接收多一个奇偶校验位。

这就很尴尬了,TM1652规格书上面确实有写到这一点,但是它愣是被我们忽略了。

所以说,在研究规格书的时候,还是要细致一点。

TM1652使用的通讯方式可以和串口通讯兼容,所以我们是直接用串口来驱动的。

那么问题来了,JL692X系列的芯片,怎么添加串口奇偶校验位?

查找JL692X的规格书,发现有一个寄存器是设置9BIT发送模式的,还有另一个寄存器就是设置第九位数据了。

根据这两个寄存器,就可以完成我们需要的奇偶校验了。

下面是相关代码:

void Tm1652_uart_init(u32 bund)
{
 printf("----------------user_uart_init---------------------");
    JL_IOMAP->CON1 |= BIT(15) | BIT(14);
//    JL_PORTC->PU |= BIT(4);
    JL_PORTC->OUT |= BIT(4);
//    JL_PORTC->DIR |= BIT(5) ;
    JL_PORTC->DIR &= ~BIT(4) ;
    JL_UART2->BAUD = (UART_CLK / bund) / 4 - 1;
    JL_UART2->CON   = BIT(13) | BIT(12) | BIT(10) | BIT(1) | BIT(0);
}
void uart2_putchar(s8 ch)
{
    JL_UART2->BUF = ch;
    __asm__ volatile("csync");
    while((JL_UART2->CON & BIT(15)) == 0);//TX IDLE

}
void Tm1652_send_byte(u8 byte)//向TM1652发送一个Byte
{
   u8 ptr = byte;
   static u8 cnt = 0;
   for(u8 i=0;i<8;i++){ /*计算当前发送的Byte中二进制1的个数*/
      if(ptr & BIT(7)){
        cnt++;
      }
      ptr = ptr << 1;
   }
   if(cnt % 2){ /*二进制1个数为偶数,CON-9置0*/
      JL_UART2->CON &=~ BIT(9);
   }else{       /*二进制1个数为奇数,CON-9置1*/
      JL_UART2->CON |= BIT(9);
   }
   cnt = 0;
   uart2_putchar(byte);//发送一个Byte
}

只用到了串口发送,所以只初始化了PC4引脚作为TX,RX引脚不初始化。

到这一步通讯方面基本上就没什么问题了。剩下的就是驱动TM1652了。

TM1652的使用也非常简单,先写一个地址(0x08),再跟5-6Byte数据(根据硬件选择5*8还是6*7),最后再写一个控制指令就可以了。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jim天河

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值