久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2865|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

SPI驅(qū)動(dòng)CH376,親測可用

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:73803 發(fā)表于 2018-12-15 14:03 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include "CH376.h"


/*******************************************************************************
* 函  數(shù)  名      : CH376_PORT_INIT
* 描      述      : 由于使用軟件模擬SPI讀寫時(shí)序,所以進(jìn)行初始化.
*                   如果是硬件SPI接口,那么可使用mode3(CPOL=1&CPHA=1)或
*                   mode0(CPOL=0&CPHA=0),CH376在時(shí)鐘上升沿采樣輸入,下降沿輸出,數(shù)
*                   據(jù)位是高位在前.
*******************************************************************************/
void CH376_PORT_INIT(void){ //CH376的SPI接口初始化
        GPIO_InitTypeDef  GPIO_InitStructure; //定義GPIO的初始化枚舉結(jié)構(gòu)       
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //選擇端口號                        
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //選擇IO接口工作方式 //上拉電阻      
        GPIO_Init(GPIOA,&GPIO_InitStructure);       

        GPIO_SetBits(CH376_INTPORT,CH376_INT); //中斷輸入腳拉高電平
        GPIO_SetBits(SPI2PORT,SPI2_NSS); //片選接口接高電平
}
/*******************************************************************************
* 函  數(shù)  名      : xEndCH376Cmd   結(jié)束命令.
*******************************************************************************/
void xEndCH376Cmd(void){ //結(jié)束命令
        GPIO_SetBits(SPI2PORT,SPI2_NSS); //SPI片選無效,結(jié)束CH376命令
}
/*******************************************************************************
SPI輸出8個(gè)位數(shù)據(jù).    * 發(fā)送: u8 d:要發(fā)送的數(shù)據(jù).
*******************************************************************************/
void Spi376OutByte(u8 d){ //SPI發(fā)送一個(gè)字節(jié)數(shù)據(jù)
   SPI2_SendByte(d);         
}
/*******************************************************************************
* 描      述      : SPI接收8個(gè)位數(shù)據(jù).  u8 d:接收到的數(shù)據(jù).
*******************************************************************************/
u8 Spi376InByte(void){        //SPI接收一個(gè)字節(jié)數(shù)據(jù)
        while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_RXNE) == RESET); //如果接受寄存器沒有收到數(shù)據(jù),循環(huán)
        return SPI_I2S_ReceiveData(SPI2);
}
/*******************************************************************************
* 描      述      : 向CH376寫  命令.
* 輸      入      : u8 mCmd:要發(fā)送的命令.
*******************************************************************************/
void xWriteCH376Cmd(u8 mCmd){
        GPIO_SetBits(SPI2PORT,SPI2_NSS);   /* 防止之前未通過xEndCH376Cmd禁止SPI片選 */
        delay_us(20);
/* 對于雙向I/O引腳模擬SPI接口,那么必須確保已經(jīng)設(shè)置SPI_SCS,SPI_SCK,SPI_SDI為輸出
*  方向,SPI_SDO為輸入方向 */
        GPIO_ResetBits(SPI2PORT,SPI2_NSS);     /* SPI片選有效 */
        Spi376OutByte( mCmd );  /* 發(fā)出命令碼 */
        delay_us(1700);   /* 延時(shí)1.5mS確保讀寫周期大于1.5mS,或者用上面一行的狀態(tài)查詢代替 */
}
/*******************************************************************************
* 描      述      : 向CH376寫   數(shù)據(jù).
* 輸      入      : u8 mData:
*                   要發(fā)送的數(shù)據(jù).
*******************************************************************************/
void xWriteCH376Data(u8 mData){
        Spi376OutByte( mData );
        delay_us(800);  /* 確保讀寫周期大于0.6mS */
}
/*******************************************************************************
* 函  數(shù)  名      : xReadCH376Data
* 描      述      : 從CH376讀數(shù)據(jù).
*******************************************************************************/
u8 xReadCH376Data(void){
        u8 i;
        delay_us(10);
        i = SPI2_SendByte(0xFF);
        return(i);
}
/*******************************************************************************
* 描      述      : 查詢CH376中斷(INT#低電平).
* 返      回      : 0:無中斷.       1:有中斷.
*******************************************************************************/
u8 Query376Interrupt(void){
        u8 i;
        i = GPIO_ReadInputDataBit(CH376_INTPORT,CH376_INT);        
        return( i );
}                       
/*******************************************************************************
* 描      述      : 初始化CH376.
* 返      回      : FALSE:無中斷.  TRUE:有中斷.
*******************************************************************************/
u8 mInitCH376Host(void){
        u8        res;       
        delay_ms(600);
        CH376_PORT_INIT( );           /* 接口硬件初始化 */
        xWriteCH376Cmd( CMD11_CHECK_EXIST );    /* 測試單片機(jī)與CH376之間的通訊接口 */
        xWriteCH376Data( 0x55 );
        res = xReadCH376Data( );
//        printf("res =%02x \n",(unsigned short)res);
        xEndCH376Cmd( );
        if ( res != 0xAA ) return( ERR_USB_UNKNOWN );  /* 通訊接口不正常,可能原因有:接口連接異常,其它設(shè)備影響(片選不唯一),串口波特率,一直在復(fù)位,晶振不工作 */
        xWriteCH376Cmd( CMD11_SET_USB_MODE ); /* 設(shè)備USB工作模式 */
        xWriteCH376Data( 0x06 ); //06H=已啟用的主機(jī)方式并且自動(dòng)產(chǎn)生SOF包  ???
        delay_us(20);
        res = xReadCH376Data( );
//        printf("res =%02x \n",(unsigned short)res);
        xEndCH376Cmd( );

        if ( res == CMD_RET_SUCCESS ){  //RES=51  命令操作成功
            return( USB_INT_SUCCESS ); //USB事務(wù)或者傳輸操作成功
        }else{
            return( ERR_USB_UNKNOWN );/* 設(shè)置模式錯(cuò)誤 */
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2018-12-15 15:13 | 只看該作者
補(bǔ)全原理圖或者詳細(xì)說明一下電路連接即可獲得100+黑幣
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美成人在线免费 | 国产成人网 | 国产精品欧美精品 | 亚洲 欧美 日韩在线 | xx视频在线观看 | 中文在线一区二区 | 99riav3国产精品视频 | 精国产品一区二区三区 | 亚洲综合区 | 91视在线国内在线播放酒店 | 日韩中文字幕网 | 男女羞羞视频免费 | 黄色片在线观看网址 | 欧美9999| 亚洲三级在线 | 久久精品国产一区二区电影 | 日韩精品久久久久久 | 91视频在线看 | 亚洲视频一区在线播放 | 99福利在线观看 | 色黄爽| 欧美日韩午夜精品 | 国产成人精品亚洲日本在线观看 | 亚洲国产一区二区在线 | 日韩中文在线观看 | 在线观看av中文字幕 | 日韩日b视频 | 99视频免费 | 久久精品成人热国产成 | 国产精品久久久久久久久久免费 | 欧美激情一区二区三区 | 99精品免费久久久久久久久日本 | 亚洲视频在线看 | 午夜综合| 亚洲日韩中文字幕一区 | 国产精品久久国产精品 | 91精品国产91综合久久蜜臀 | 爱操av | 亚洲高清三级 | 国产日批 | 在线免费观看亚洲 |