CH375并口讀寫時(shí)序問題

下面是STM32控制CH375的CH375并口讀寫時(shí)序的程序: void CH375_PORT_INIT(void) /* 由于使用通用I/O模塊并口讀寫時(shí)序,所以進(jìn)行初始化 */ { RCC->APB2ENR|=1<<2; //使能PORTA時(shí)鐘 GPIOA->CRL&=0X00000000; GPIOA->CRL|=0X00077774; //設(shè)置INT#為浮空輸入,CS,WR,RD,A0為開漏輸出,速度為50MHZ GPIOA->ODR|=0X0000001C; //設(shè)置CS,WR,RD默認(rèn)為高電平 GPIOA->CRH&=0X00000000; GPIOA->CRH|=0X44444444; //設(shè)置8位并口為浮空輸入 RCC->APB2ENR|=1<<3; //使能PORTB時(shí)鐘 GPIOB->CRL&=0X00000000; GPIOB->CRL|=0X00077774; //設(shè)置INT#為浮空輸入,CS,WR,RD,A0為開漏輸出,速度為50MHZ GPIOB->ODR|=0X0000001C; //設(shè)置CS,WR,RD默認(rèn)為高電平 GPIOB->CRH&=0X00000000; GPIOB->CRH|=0X44444444; //設(shè)置8位并口為浮空輸入 }

void xWriteCH375Cmd( u8 mCmd ) /* 外部定義的被CH375程序庫調(diào)用的子程序,向CH375寫命令 */ { if(Change_Bit==0x01) { mDelay1_2uS( ); mDelay1_2uS( ); /* 至少延時(shí)1uS */ GPIOA->CRH|=0X77777777; //設(shè)置8位并口為開漏輸出 GPIOA->ODR&=0X00FF; GPIOA->ODR|=(u16)mCmd << 8 ; // 向CH375的并口輸出數(shù)據(jù) GPIOA->CRL|=0X00077770; // 寫操作所以數(shù)據(jù)輸出, 設(shè)置CS,WR,RD,A0為輸出 /* 輸出有效寫控制信號(hào), 寫CH375芯片的命令端口 */ PAout(1)=1; // A0=1 PAout(2)=0; // CS=0 PAout(3)=0; // WR==0 PAout(4)=1; // RD=1 PAout(4)=1;PAout(4)=1;//此操作無意義,僅作延時(shí),CH375要求讀寫脈沖寬度大于100ns /* 輸出無效的控制信號(hào), 完成操作CH375芯片*/ PAout(2)=1; // CS=1 PAout(3)=1; // WR=1 PAout(4)=1; // RD=1 PAout(1)=0; // A0=0 GPIOA->CRH&=0X00000000; // 禁止數(shù)據(jù)輸出 GPIOA->CRH|=0X44444444; mDelay1_2uS( ); mDelay1_2uS( ); // 至少延時(shí)2uS } if(Change_Bit==0x02) { mDelay1_2uS( ); mDelay1_2uS( ); /* 至少延時(shí)1uS */ GPIOB->CRH|=0X77777777; //設(shè)置8位并口為開漏輸出 GPIOB->ODR&=0X00FF; GPIOB->ODR|=(u16)mCmd << 8 ; // 向CH375的并口輸出數(shù)據(jù) GPIOB->CRL|=0X00077770; // 寫操作所以數(shù)據(jù)輸出, 設(shè)置CS,WR,RD,A0為輸出 /* 輸出有效寫控制信號(hào), 寫CH375芯片的命令端口 */ PBout(1)=1; // A0=1 PBout(2)=0; // CS=0 PBout(3)=0; // WR==0 PBout(4)=1; // RD=1 PBout(4)=1;PBout(4)=1;//此操作無意義,僅作延時(shí),CH375要求讀寫脈沖寬度大于100ns /* 輸出無效的控制信號(hào), 完成操作CH375芯片*/ PBout(2)=1; // CS=1 PBout(3)=1; // WR=1 PBout(4)=1; // RD=1 PBout(1)=0; // A0=0 GPIOB->CRH&=0X00000000; // 禁止數(shù)據(jù)輸出 GPIOB->CRH|=0X44444444; mDelay1_2uS( ); mDelay1_2uS( ); // 至少延時(shí)2uS } }

void xWriteCH375Data( u8 mData ) /* 外部定義的被CH375程序庫調(diào)用的子程序,向CH375寫數(shù)據(jù) */ { if(Change_Bit==0x01) { GPIOA->CRH|=0X77777777; //設(shè)置8位并口為開漏輸出 GPIOA->ODR&=0X00FF; GPIOA->ODR|=(u16)mData << 8 ; // 向CH375的并口輸出數(shù)據(jù) GPIOA->CRL|=0X00077770; // 寫操作所以數(shù)據(jù)輸出, 設(shè)置CS,WR,RD,A0為輸出 /* 向CH375的并口輸出數(shù)據(jù) */ PAout(1)=0; // A0=0 PAout(2)=0; // CS=0 PAout(3)=0; // WR=0 PAout(4)=1; // RD=1 PAout(4)=1;PAout(4)=1;//此操作無意義,僅作延時(shí),CH375要求讀寫脈沖寬度大于100ns /* 輸出無效的控制信號(hào), 完成操作CH375芯片*/ PAout(2)=1; // CS=1 PAout(3)=1; // WR=1 PAout(4)=1; // RD=1 PAout(1)=0; // A0=0 GPIOA->CRH&=0X00000000; // 禁止數(shù)據(jù)輸出 GPIOA->CRH|=0X44444444; mDelay1_2uS( ); mDelay1_2uS( ); // 至少延時(shí)2uS } if(Change_Bit==0x02) { GPIOB->CRH|=0X77777777; //設(shè)置8位并口為開漏輸出 GPIOB->ODR&=0X00FF; GPIOB->ODR|=(u16)mData << 8 ; // 向CH375的并口輸出數(shù)據(jù) GPIOB->CRL|=0X00077770; // 寫操作所以數(shù)據(jù)輸出, 設(shè)置CS,WR,RD,A0為輸出 /* 向CH375的并口輸出數(shù)據(jù) */ PBout(1)=0; // A0=0 PBout(2)=0; // CS=0 PBout(3)=0; // WR=0 PBout(4)=1; // RD=1 PBout(4)=1;PBout(4)=1;//此操作無意義,僅作延時(shí),CH375要求讀寫脈沖寬度大于100ns /* 輸出無效的控制信號(hào), 完成操作CH375芯片*/ PBout(2)=1; // CS=1 PBout(3)=1; // WR=1 PBout(4)=1; // RD=1 PBout(1)=0; // A0=0 GPIOB->CRH&=0X00000000; // 禁止數(shù)據(jù)輸出 GPIOB->CRH|=0X44444444; mDelay1_2uS( ); mDelay1_2uS( ); // 至少延時(shí)2uS } }

u8 xReadCH375Data( void ) /* 外部定義的被CH375程序庫調(diào)用的子程序,從CH375讀數(shù)據(jù) */ { u8 mData; if(Change_Bit==0x01) { mDelay1_2uS( ); /* 至少延時(shí)1.2uS */ GPIOA->CRH&=0X00000000; GPIOA->CRH|=0X44444444; //設(shè)置8位并口為浮空輸入 /* 輸出有效讀控制信號(hào), 讀CH375芯片的數(shù)據(jù)端口*/ PAout(1)=0; // A0=0 PAout(2)=0; // CS=0 PAout(3)=1; // WR=1 PAout(4)=0; // RD=0 mData = (u8)( GPIOA->IDR>> 8 ); //從CH375的并口PA.15-PA.8輸入數(shù)據(jù) PAout(4)=0;PAout(4)=0;//此操作無意義,僅作延時(shí),CH375要求讀寫脈沖寬度大于100ns /*輸出無效的控制信號(hào), 完成操作CH375芯片 */ PAout(1)=0; // A0=0 PAout(2)=1; // CS=1 PAout(3)=1; // WR=1 PAout(4)=1; // RD=1 return( mData ); } if(Change_Bit==0x02) { mDelay1_2uS( ); /* 至少延時(shí)1.2uS */ GPIOB->CRH&=0X00000000; GPIOB->CRH|=0X44444444; //設(shè)置8位并口為浮空輸入 /* 輸出有效讀控制信號(hào), 讀CH375芯片的數(shù)據(jù)端口*/ PBout(1)=0; // A0=0 PBout(2)=0; // CS=0 PBout(3)=1; // WR=1 PBout(4)=0; // RD=0 mData = (u8)( GPIOA->IDR>> 8 ); //從CH375的并口PB.15-PB.8輸入數(shù)據(jù) PBout(4)=0;PBout(4)=0;//此操作無意義,僅作延時(shí),CH375要求讀寫脈沖寬度大于100ns /*輸出無效的控制信號(hào), 完成操作CH375芯片 */ PBout(1)=0; // A0=0 PBout(2)=1; // CS=1 PBout(3)=1; // WR=1 PBout(4)=1; // RD=1 return( mData ); } return( mData ); } 1、PAout(4)=1;PAout(4)=1;//此操作無意義,僅作延時(shí),CH375要求讀寫脈沖寬度大于100ns 我用這條語句做延時(shí)語句可不可以,達(dá)得到脈沖寬度大于100ns的要求嗎? 2、編譯的時(shí)候出現(xiàn)這個(gè)錯(cuò)誤: STM32CH375.axf: Error: L6218E: Undefined symbol xReadCH375Cmd (referred from main.o).這是什么意思? 而再在程序里定義好 u8 xReadCH375Cmd( void ) { u8 i; return i; } 編譯的時(shí)候才不出現(xiàn)bug,這是為什么? 3、以上我附的CH375并口讀寫時(shí)序的程序還存在什么問題,請(qǐng)幫我指出錯(cuò)誤。 最后附上真摯的感謝,謝謝!

(1)可以 (2)這個(gè)是你沒定義xReadCH375Cmd( ),有些地方需要調(diào)用這個(gè)函數(shù),你需要像xReadCH375Data一樣寫函數(shù)。 (3)測試并口正確與否?你可以做一下測試命令,看看數(shù)據(jù)能不能取反。


測試命令?用CHECK_EXIST?實(shí)在超級(jí)終端里看數(shù)據(jù)是否取反么?


是的 發(fā)送CHECK_EXIST,再發(fā)送一個(gè)數(shù)據(jù),如果硬件連線和時(shí)序沒問題,會(huì)收到這個(gè)數(shù)據(jù)的取反值。


好的,謝謝


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频