简介

CH9434是一款SPI转四串口转接芯片,提供四组全双工的9线异步串口,用于单片机/嵌入式/安卓系统扩展异步串口。提供25路GPIO,以及支持RS485收发控制引脚TNOW。本篇基于STM32F103,介绍CH9434在MCU平台移植和使用方法。

Linux移植说明可以跳转到这个链接:https://blog.csdn.net/WCH_TechGroup/article/details/128288016

本次移植的最终代码工程可以去个人Gitee下载:https://gitee.com/maji19971221/wch_-per#202214

CH9434EVT下载链接:https://www.wch.cn/downloads/CH9434EVT_ZIP.html

移植说明

1. 找一个最简单的MCU的SPI代码。

2. 去WCH官网下载CH9434EVT.ZIP,找到里面MCU的驱动代码。CH9434.c和CH9434.h复制到工程里面。

3. 因为不同MCU,SPI的首发,以及自己写的CS的拉高拉低和CH9434.c有区别。把里面的CH9434_SPI_SCS_OP;CH9434_SPI_WRITE_BYTE函数改为自己MCU的写法或者把自己的代码在外面封一层函数就行了。我这边选择再封了一层函数,不去修改驱动文件。

4. 接下来需要判断主控和CH9434之间是否保持一个正常的接口通讯。芯片这里预留了一个用户自定义寄存器(SCR寄存器),可以通过往这个寄存器写入随机值再读出,看读出值是否为刚刚写入的值,如果不是那就是接口通讯异常,问题有以下几个可能:

a)      CH9434的硬件存在问题。硬件问题判断方向比较多。可以通过看芯片的VCORE(33)脚的电压(1.05V-1.1V),以及外部32M晶振是否振荡做一个基础的判断。常见的一些硬件设计问题包括:1. CH9434的3个VDD脚没有外部短接,这个是在硬件设计时比较容易犯的错误,芯片的3个VDD(1,2,35)脚如果没外部短接,芯片无法正常工作。2. PCB封装画错,沁恒目前只提供AD的元器件封装库,对于使用Candence等EDA工具的需要自己建立元器件库,而CH9434A的封装并不是每边引脚数量一致,这个就会导致部分PCB工程师在绘制时出错。

b)      软件时序问题。CH9434A的时序图如下(使用DsView抓包获得)。可以看到,CH9434的正常通讯时序是在一个CS低电平里面有两个字节的数据(命令+数据),并且命令和数据之间要保持至少3us的间隔。没有按照这个要求,芯片可能就无法正常识别主机发过来的数据,从而通讯失败。

5. 程序添加SCR读写操作代码,判断接口通讯是否正常。

正常的话读取数据就是0x55,通讯异常就是其它数据。这样和9434最基础的通讯代码就已经完成了。

功能测试

串口功能测试

首先需要初始化时钟和串口,初始化的代码,可以参考EVT中的main函数。因为都已经封装好了函数,用户实际只需要调用库函数,给入对应的实参即可。这边拿其中的串口0(0-3)举例。CH9434的4个串口都是独立的,每个串口的寄存器都有独立的寄存器地址,所以需要根据自己实际需要使用几个串口去做对应的初始化设置。芯片本身的串口是TTL,但是也支持流控和485Tnow的使能控制,如果需要使用只需要将代码这边对应的宏定义打开即可。

通过EXIT_INT宏定义选择使用while(1)查询方式还是使用INT外部中断的方式去做。需要注意的是,CH9434的中断方式是低电平触发,目前部分MCU仅支持下降沿触发,此时就需要在外部中断服务函数里面加上INT引脚判断,直到INT变高才退出外部中断服务函数。

将CH9434EVT里面的main函数处理复制到自己的工程。这里的代码做的功能就是回传(收到什么回传什么)。整个代码的处理流程逻辑如下:

最终实现的效果就是串口收到什么就回传什么数据。

RS485功能测试

评估版通过跳帽将芯片的串口链接到485芯片。程序方面只需要打开RS485宏定义。

和TTL的初始化代码区别就是多了一个RS485 TNOW使能的初始化,读写的程序流程和前面的TTL保持一致。

最终实测效果也是一样,实现的效果就是串口收到什么就回传什么数据。

Modem流控功能测试

程序中将开启流控的宏定义打开。和TTL的初始化代码区别就是多了一步流控的使能以及RTS和DTR引脚的电平状态设置,读写的程序流程和前面的TTL保持一致。

打开串口工具的RTS使能,即可实现正常的数据收发。

GPIO功能测试

将GPIO_Test宏定义打开,本次代码是将GPIO0-12作为推挽输出,GPIO13-25作为上拉输入读取电平状态。

程序下载,如图,随机拿GPIO10链接一个LED灯。实现闪烁效果。

随机将GPIO19接地,程序打印正常读取。

CH9434-MCU代码移植,芯片使用详细说明(附Linux开发资料链接)的更多相关文章

  1. 使用Phoenix将SQL代码移植至HBase

    1.前言 HBase是云计算环境下最重要的NOSQL数据库,提供了基于Hadoop的数据存储.索引.查询,其最大的优点就是可以通过硬件的扩展从而几乎无限的扩展其存储和检索能力.但是HBase与传统的基 ...

  2. 【MCU】移植AT32库&FreeRTOS教程

    目录 前言 1. 移植AT库 1.1 移植内核相关文件 1.2 移植芯片型号相关文件 1.3 移植芯片外设驱动库 1.4 移植配置文件及中断回调函数文件 2. 移植FreeRTOS源码 2.1 获取 ...

  3. CUDA代码移植

    如果CUDA的代码移植,一个是要 include文件夹对不对,这个是.h文件能否找到的关键,另一个就是lib,这个是.lib文件能否找到的关键.具体检查地方,见下头. include: lib:

  4. 意法STM32F1系列MCU单片机解密芯片破解复制

    意法STM32F1系列MCU单片机解密芯片破解复制 STM32F1系列MCU芯片解密: STM32F100解密 | STM32F101解密 | STM32F102解密 | STM32F103解密 |  ...

  5. 将Linux代码移植到Windows的简单方法

    一.前言 Linux拥有丰富各种源代码资源,但是大部分代码在Windows平台情况是无法正常编译的.Windows平台根本无法直接利用这些源代码资源.如果想要使用完整的代码,就要做移植工作.因为C/C ...

  6. 代码移植的福音 namespace_alias

    命名空间别名 允许程序员定义命名空间的另一个名字 它们常用作长的或嵌套过深的命名空间的简便使用方式. 我们也可以将用在代码移植上,而无需修改源代码的文件所定义的命名空间, 为后面升级merge代码创造 ...

  7. 万字长文,以代码的思想去详细讲解yolov3算法的实现原理和训练过程,Visdrone数据集实战训练

    以代码的思想去详细讲解yolov3算法的实现原理和训练过程,并教使用visdrone2019数据集和自己制作数据集两种方式去训练自己的pytorch搭建的yolov3模型,吐血整理万字长文,纯属干货 ...

  8. 小白自制Linux开发板 二. u-boot移植

    上一篇:小白自制Linux开发板 一. 瞎抄原理图与乱画PCB  中我们做了一个小型而没用的开发板,用的是Licheepi Nano的镜像,那从本篇开始我们开始自己构建它的灵魂吧. 我们都知道,PC在 ...

  9. 转:微信开发获取地理位置实例(java,非常详细,附工程源码)

    微信开发获取地理位置实例(java,非常详细,附工程源码)   在本篇博客之前,博主已经写了4篇关于微信相关文章,其中三篇是本文基础: 1.微信开发之入门教程,该文章详细讲解了企业号体验号免费申请与一 ...

  10. 她娇羞道“不用这样细致认真的说啊~~”———详细图解在Linux环境中创建运行C程序

    她娇羞说,不用这样细致认真的说啊———详细图解在Linux环境中创建运行C程序“不,这是对学习的负责”我认真说到 叮叮叮,停车,让我们看看如何在Linux虚拟机环境中,创建运行C程序 详细图解在Lin ...

随机推荐

  1. C++面向对象编程之虚函数与多态和继承和复合下的构造和析构

    1.对于非虚函数,是不希望派生类对该函数重新定义: 对于virtual函数,在父类已经有默认定义后,并希望子类重新定义它: 对于pure virtual函数,父类没有默认定义,派生类必须要重新定义它: ...

  2. MatrixOne从入门到实战04——MatrixOne的连接和建表

    MatrixOne从入门到实战--MatrixOne的连接和建表 前景回顾 前几篇文章,为大家介绍了MatrixOne这个产品,以及编译.部署MatrixOne的服务. 直通车: MatrixOne从 ...

  3. 动态编译库 Natasha 5.0 兼容版本发布

    Natasha 5.0 版本已于 2022/10/10 日发布, 此次大版本更迭带来了兼容性支持, 目前 Natasha 可以兼容 standard2.0 及 coreapp3.1 以上版本. 下载使 ...

  4. 使用python制作动图

    利用python制作gif图 引言 当写文章时候,多张图片会影响排版,可以考虑制作gif图 准备 pip install imageio 代码 # This is a sample Python sc ...

  5. NLP之基于Seq2Seq和注意力机制的句子翻译

    Seq2Seq(Attention) @ 目录 Seq2Seq(Attention) 1.理论 1.1 机器翻译 1.1.1 模型输出结果处理 1.1.2 BLEU得分 1.2 注意力模型 1.2.1 ...

  6. python用ffmpeg进行视频处理

    1.下载及安装 在ffmpeg官网https://ffmpeg.zeranoe.com/builds/可以下载到需要的版本,然后解压到D盘,添加环境变量(如D:\ffmpeg\bin) 在cmd输入f ...

  7. python中的super()是什么?

    技术场景:python中的super,名为超类,可以简单的理解为执行父类的__init__函数.由于在python中不论是一对一的继承,还是一子类继承多个父类,都会涉及到执行的先后顺序的问题.那么本文 ...

  8. Android网络请求(1)

    Android网络请求(1) ​ 安卓开发网络请求可谓是安卓开发的灵魂,如果你不会网络请求,那么你开发的应用软件就是一具没有灵魂的枯骨. ​ 在安卓开发中进行网络请求和java中的网络请求有异曲同工之 ...

  9. i春秋Vld

    进去就问我们懂不懂Vulcan Logic Dumper,然后下面是一个报false.我们查看源码,在源码的最后提示我们index.php.txt的存在,话不多说,直接访问试试. 出现一堆我们暂时还看 ...

  10. 说一下 ArrayList 和 LinkedList 的区别?

    本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问. 前言 大家好,我是小彭. 在上一篇文章里,我们聊到了基于动态数组 ArrayList 线性表,今天我们来讨论 ...