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

標題: SPI驅動CH376,親測可用 [打印本頁]

作者: lusx123    時間: 2018-12-15 14:03
標題: SPI驅動CH376,親測可用
#include "CH376.h"


/*******************************************************************************
* 函  數  名      : CH376_PORT_INIT
* 描      述      : 由于使用軟件模擬SPI讀寫時序,所以進行初始化.
*                   如果是硬件SPI接口,那么可使用mode3(CPOL=1&CPHA=1)或
*                   mode0(CPOL=0&CPHA=0),CH376在時鐘上升沿采樣輸入,下降沿輸出,數
*                   據位是高位在前.
*******************************************************************************/
void CH376_PORT_INIT(void){ //CH376的SPI接口初始化
        GPIO_InitTypeDef  GPIO_InitStructure; //定義GPIO的初始化枚舉結構       
    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); //片選接口接高電平
}
/*******************************************************************************
* 函  數  名      : xEndCH376Cmd   結束命令.
*******************************************************************************/
void xEndCH376Cmd(void){ //結束命令
        GPIO_SetBits(SPI2PORT,SPI2_NSS); //SPI片選無效,結束CH376命令
}
/*******************************************************************************
SPI輸出8個位數據.    * 發送: u8 d:要發送的數據.
*******************************************************************************/
void Spi376OutByte(u8 d){ //SPI發送一個字節數據
   SPI2_SendByte(d);         
}
/*******************************************************************************
* 描      述      : SPI接收8個位數據.  u8 d:接收到的數據.
*******************************************************************************/
u8 Spi376InByte(void){        //SPI接收一個字節數據
        while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_RXNE) == RESET); //如果接受寄存器沒有收到數據,循環
        return SPI_I2S_ReceiveData(SPI2);
}
/*******************************************************************************
* 描      述      : 向CH376寫  命令.
* 輸      入      : u8 mCmd:要發送的命令.
*******************************************************************************/
void xWriteCH376Cmd(u8 mCmd){
        GPIO_SetBits(SPI2PORT,SPI2_NSS);   /* 防止之前未通過xEndCH376Cmd禁止SPI片選 */
        delay_us(20);
/* 對于雙向I/O引腳模擬SPI接口,那么必須確保已經設置SPI_SCS,SPI_SCK,SPI_SDI為輸出
*  方向,SPI_SDO為輸入方向 */
        GPIO_ResetBits(SPI2PORT,SPI2_NSS);     /* SPI片選有效 */
        Spi376OutByte( mCmd );  /* 發出命令碼 */
        delay_us(1700);   /* 延時1.5mS確保讀寫周期大于1.5mS,或者用上面一行的狀態查詢代替 */
}
/*******************************************************************************
* 描      述      : 向CH376寫   數據.
* 輸      入      : u8 mData:
*                   要發送的數據.
*******************************************************************************/
void xWriteCH376Data(u8 mData){
        Spi376OutByte( mData );
        delay_us(800);  /* 確保讀寫周期大于0.6mS */
}
/*******************************************************************************
* 函  數  名      : xReadCH376Data
* 描      述      : 從CH376讀數據.
*******************************************************************************/
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 );    /* 測試單片機與CH376之間的通訊接口 */
        xWriteCH376Data( 0x55 );
        res = xReadCH376Data( );
//        printf("res =%02x \n",(unsigned short)res);
        xEndCH376Cmd( );
        if ( res != 0xAA ) return( ERR_USB_UNKNOWN );  /* 通訊接口不正常,可能原因有:接口連接異常,其它設備影響(片選不唯一),串口波特率,一直在復位,晶振不工作 */
        xWriteCH376Cmd( CMD11_SET_USB_MODE ); /* 設備USB工作模式 */
        xWriteCH376Data( 0x06 ); //06H=已啟用的主機方式并且自動產生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事務或者傳輸操作成功
        }else{
            return( ERR_USB_UNKNOWN );/* 設置模式錯誤 */
        }
}


作者: admin    時間: 2018-12-15 15:13
補全原理圖或者詳細說明一下電路連接即可獲得100+黑幣




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: av乱码 | 五月婷婷丁香婷婷 | 91精品国产91久久久久久不卞 | www.久久久.com| 日韩午夜一区二区三区 | 成人免费视频在线观看 | 一本综合久久 | 久久天堂 | 欧美日韩高清 | 欧美视频三级 | 国精产品一区一区三区免费完 | 欧美色图综合网 | 9久9久 | 综合一区二区三区 | 国产欧美一区二区三区日本久久久 | 一区二区三区中文字幕 | 久久国产综合 | 欧美在线视频网站 | 日本a视频| 羞羞网站在线免费观看 | 91精品国产乱码久久久久久 | 免费毛片www com cn | 在线婷婷 | 国产免费一区二区三区最新6 | 国产在线永久免费 | 狠狠躁18三区二区一区 | 亚洲免费在线播放 | 欧美日韩国产精品一区二区 | 日韩精品一区二区三区在线 | 少妇一区在线观看 | 一级毛片视频在线观看 | 日日夜夜狠狠操 | 国产精品久久久久久久久免费软件 | 日韩三片 | h片在线播放 | 黄色电影在线免费观看 | 中文字幕一区在线观看视频 | 久草久草久草 | 日韩精品专区在线影院重磅 | 成人看片在线观看 | 日本视频中文字幕 |