我在csdn上也搜索过一些关于ch376芯片的用法,不过大多都非常笼统。最近我也在做关于用32单片机与ch376连接读取U盘文件项目的一部分。在某宝买了一块ch376模块,看过了给的数据手册,有一部分收获。不过给的例程都是用51写的,对于刚学32的我显然有些吃力,幸好有师兄帮我把部分51的c程序改成了32的。废话不多,我们就直接开始正文。
ch376数据传输支持8位并口,spi设备接口,异步串口。这里我们用的是异步串口,只需要把模块上的TX和RX与单片机上串口一(查看单片机的数据手册看串口一的收发引脚是哪个)的RX和TX连接,ch376模块接5V电源。接下来第一步我们是要编程调通单片机与模块的通信,我们在给的例程中需找到几个文件(这些文件在买ch376模块的时候商家都会包括的),如下图:
不过这里都是51的c程序,需要改成适合32的。
我们就从程序里面看吧,只给出部分程序,如下:
uint8_t mInitCH376Host( void )
{
uint8_t res;
CH376_PORT_INIT( );
xWriteCH376Cmd ( CMD11_CHECK_EXIST );
xWriteCH376Data( 0x65 );
res = xReadCH376Data();
if ( res != 0x9A ) return( ERR_USB_UNKNOWN );
我们在把32和模块 的硬件连接弄好之后下载程序,用编程软件的调试软件来调试。如上图中,第一句定义
变量res,接下来向ch376内发指令“”CMD11_CHECK_EXIST“。这是检测单片机能否与模块通信的指令,需要写入一个数据,可以是任意数据(上面程序写入的数据是0x65)。如果可以通信,则ch376会向单片机返回写入数据的每位按位取反。例如:写入数据为0x65,二进制位 01100101,按位取反后就是10011010,即为0x9A。即res若为0x9A,则代表两者之间能建立通信连接。接下来就设置usb的工作模式,同上述一样,也是写入指令后再写入一个数据,不过这个数据是特定的,应该是规定好的。到此,单片机就能与ch376通信。后续的单片机读取U盘数据还要写其他的程序。。。。
本篇文章的内容也是我实践得来的结果,希望能够帮助到大家。此外,我是刚开始学嵌入式,有不足的地方希望多多指正。