|
發布時間: 2021-2-19 10:34
正文摘要:我使用的是STC15W4K56S4芯片,連接ESP8266。ESP8266連接的串口是P1^0和P1^1,與CH340連接的串口P3^0和P3^1不同。該怎么實現轉接。 |
| 通過USB轉TTL |
|
這點東西也很難嗎?開個數組存起來不就行了 |
cn_zhx 發表于 2021-2-21 15:24 嗯對 是這個意思。 但串口3的收發程序編寫不知道哪里錯了,不能收發,能不能幫忙看看。 #include "stc15f2k60s2.h" // 單片機STC15F2K60S2頭文件,可以不再加入reg51.h #include "uart.h" sbit KEY1 = P2^0; sbit KEY2 = P2^1; #define S3RI 0x01 //S3CON.0 #define S3TI 0x02 //S3CON.1 #define ES3 0x08 //IE2.3 #define uchar unsigned char #define uint unsigned int unsigned char date; void delay(uint z) { uint i,j; for(i=z;i>0;i--) for(j=110;j>0;j--); } void UartInit(void); void Uart3Init(void); void main(void) { //定時器 TMOD = 0x00;//定時器0,模式0 TH0=0x3c;//50ms定時器初值設定 TL0=0xb0; TR0=1; ET0=1; EA=1; UartInit(); Uart3Init(); led1 = 1; led3 = 1; while(1) { if(KEY2==0) { delay(1000); if(KEY2==0) //確認觸發 { SBUF = '1'; delay(100); } if(KEY1==0) { delay(1000); if(KEY1==0) //確認觸發 { S3BUF='2'; delay(100); } } } } } void uart1ISR() interrupt 4 { if(RI){ date=SBUF; //單片機接受 SBUF=date; //單片機發送 RI=0; } if(TI){ TI=0; } } void UART3_Isr(void) interrupt 17 { if (S3CON & S3RI) { date = S3BUF; S3BUF = date; S3CON &= ~S3RI; // 清中斷標志 } if (S3CON & S3TI) { S3CON &= ~S3TI; // 清中斷標志 } } void Uart3Init(void) { // S3CON = 0x10; // 8位數據,可變波特率 // T2L=(65536-11059200/4/9600); // T2H=(65536-11059200/4/9600)>>8; // AUXR = 0x14; //定時器2時鐘為Fosc,即1T // IE2=0x08; // 使能串口中斷 // EA = 1; // 開總中斷 S3CON = 0x10; // 8位數據,可變波特率 AUXR |= 0x04; // 定時器2時鐘為Fosc,即1T T2L = (65536-11059200/4/9600); T2H = (65536-11059200/4/9600)>>8; // 設定定時初值 AUXR |= 0x10; // 啟動定時器2 IE2 = ES3; // 使能串口中斷 EA = 1; // 開總中斷 } void UartInit(void) //9600bps { /* SCON = 0x50; //8位數據,可變波特率 // AUXR = 0x15; //定時器2時鐘為Fosc,即1T T2L=(65536-11059200/4/9600); T2H=(65536-11059200/4/9600)>>8; ET1 = 0; //禁止定時器1中斷 ES=1;*/ SCON = 0x50; // 8位數據,可變波特率 AUXR |= 0x40; // 定時器1時鐘為Fosc,即1T AUXR &= 0xFE; // 串口1選擇定時器1為波特率發生器 TMOD &= 0x0F; // 設定定時器1為16位自動重裝方式 TL1 = (65536-11059200/4/9600); // 設定定時初值 TH1 = (65536-11059200/4/9600)>>8; // 設定定時初值 ET1 = 0; // 禁止定時器1中斷 TR1 = 1; // 啟動定時器1 ES = 1; // 開串口中斷 EA = 1; // 開總中斷 } |
|
你的問題描述的不太明白。 看看是不是這樣:P30接收的數據從P11發送出去,相反,P10接收的數據從P31發送出去。如果是這樣的話,寫上兩個不同串口的收發程序,透明發送出去就行。 |
|
隨便網上搜個STM32的ESP8266例程就好了,自己改一下 |
418854190 發表于 2021-2-19 16:19 好的 我看看 另外請問你說的下載軟件的范例程序是哪里找的 |
|
如果這個芯片有雙串口,那就從芯片手冊上去找,我記得stc的新芯片官方都給例程 |
| 這兩個串口是完全獨立的,不能進行相互切換 |
|
不懂C語言 匯編轉過P3.6 P3.7 想轉哪個就調用哪個 用的是STC15W204S 試過用P3.0接收 P3.7發送 程序是在下載軟件的范例程序里找的 源程序沒用明白 把改串口的部分提取出來就行了 ;串口P3.0_RX P3.1_TX RXTX30: MOV A,P_SW1; ANL A,#03FH; //S1_S0=0 S1_S1=0 MOV P_SW1,A; //(P3.0/RxD, P3.1/TxD) RET; ;----------------------- ;串口P3.6_RX P3.7_TX RXTX36: MOV A,P_SW1 ANL A,#03FH //S1_S0=1 S1_S1=0 ORL A,#S1_S0 //(P3.6/RxD_2, P3.7/TxD_2) MOV P_SW1,A RET; |
devcang 發表于 2021-2-19 12:08 這總共有四組串口。 下載讀寫用的是P30和P31,想將P30的RX轉P11的tx2,P10的rx2轉P31的tx。但不知道該怎么操作編碼。 |
devcang 發表于 2021-2-19 12:08 這個芯片總共有四組串行口。 因為下載用的是P30和P31口,將3031收到的at指令再發過去(rx轉tx2,rx2轉tx)。我不知道該怎么編碼。 |
|
你好@ 這兩個串口是完全獨立的,不能進行相互切換 |
|
這是雙串口的MCU,打開雙串口(完整版的下載工具中有例子),速率相同,就可以通訊了 |
| 是為了解決發送AT指令,沒有反應的問題。希望大佬們給點方法思路! |