我用 “一键双雕” 下载器连接P30、P31,设置了uart1使用p30、p31,用于接收/返回电脑上串口命令,同时我还uart1的P16、P17连接了蓝牙模块的tx、rx引脚,实时保持与蓝牙模块通讯。
我这种方式可行吗?uart1的两对“P30、P31”和“P16、P17” 能同时单独通信吗?
代码如下,目前只写了P30、P31的的配置,并且采用了DMA读取uar1的数据
- void UartInit(void)
- {
- S1_S1 = 0; //UART1 switch to, 00: P3.0 P3.1, 01: P3.6 P3.7, 10: P1.6 P1.7, 11: P4.3 P4.4
- S1_S0 = 0;
- SCON = 0x50; //8位数据,可变波特率
- AUXR |= 0x40; //定时器时钟1T模式
- AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
- TMOD &= 0x0F; //设置定时器模式
- TL1 = 0xA9; //设置定时初始值
- TH1 = 0xFF; //设置定时初始值
- ET1 = 0; //禁止定时器中断
- TR1 = 1; //定时器1开始计时
- //ES = 1; //使能串口1中断
-
- //UR1TOCR = 0xc0; //使能超时接收,使能超时中断,超时时钟选择 1:系统时钟 0:串口数据位率(波特率)
- //UR1TOTL = 0xFF;
- //UR1TOTH = 0x0F; //0x5666 = 22118
- //UR1TOTE = 0x00; //需要写 UR1TOTE 后,新的TM值才会生效
- }
-
-
- void UartPutc(unsigned char dat)
- {
- SBUF = dat;
- while(TI == 0);
- TI = 0;
- }
-
- char putchar(char c)
- {
- UartPutc(c);
- return c;
- }
-
-
- //========================================================================
- // 函数: void DMA_Config(void)
- // 描述: UART DMA 功能配置.
- // 参数: none.
- // 返回: none.
- // 版本: V1.0, 2024-5-6
- //========================================================================
- void DMA_UART1_Config(void)
- {
- DMA_UR1T_CFG = 0x80; //bit7 0:Disable Interrupt
- DMA_UR1T_STA = 0x00;
- DMA_UR1T_AMT = (u8)(UART1_BUF_COT - 1); //设置传输总字节数(低8位):n+1
- DMA_UR1T_AMTH = (u8)((UART1_BUF_COT - 1)>>8); //设置传输总字节数(高8位):n+1
- DMA_UR1T_TXAH = (u8)((u16)&DmaBuffer >> 8);
- DMA_UR1T_TXAL = (u8)((u16)&DmaBuffer);
- DMA_UR1T_CR = 0x80; //bit7 1:使能 UART1_DMA, bit6 1:开始 UART1_DMA 自动发送
-
- DMA_UR1R_CFG = 0x80; //bit7 0:Disable Interrupt
- DMA_UR1R_STA = 0x00;
- DMA_UR1R_AMT = (u8)(UART1_BUF_COT - 1); //设置传输总字节数(低8位):n+1
- DMA_UR1R_AMTH = (u8)((UART1_BUF_COT - 1)>>8); //设置传输总字节数(高8位):n+1
- DMA_UR1R_RXAH = (u8)((u16)&DmaBuffer >> 8);
- DMA_UR1R_RXAL = (u8)((u16)&DmaBuffer);
- DMA_UR1R_CR = 0xa1; //bit7 1:使能 UART1_DMA, bit5 1:开始 UART1_DMA 自动接收, bit0 1:清除 FIFO
- }
复制代码
|