TM4C1230E6PM 晶振16M的在485通信 波特率1200时出现怪现象

2019-07-19 13:16发布

TM4C1230E6PM 晶振16M的在485通信 波特率1200时出现怪现象
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
heweibig
1楼-- · 2019-07-19 16:36
楼主详细说说怎么回事啊,这么说太笼统了
lizye
2楼-- · 2019-07-19 19:00
波特率1200 单独发AA,
如果只用以下
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,GPIO_PIN_3); //RDE=1        
ROM_UARTCharPutNonBlocking(UART2_BASE, data_buffer);
while(UARTBusy(UART2_BASE));        //等待发送完成        
结果显示 35
如果加延时1MS
SysCtlDelay(SysCtlClockGet() / (1000 * 3));
结果显示 75
如果加延时2MS
结果显示 F5
如果加延时3MS
才显示 AA

GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,GPIO_PIN_3); //RDE=1        
ROM_UARTCharPutNonBlocking(UART2_BASE, data_buffer);
while(UARTBusy(UART2_BASE));        //等待发送完成        
SysCtlDelay(3*SysCtlClockGet() / (1000 * 3));        
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,~GPIO_PIN_3); //RDE=0        

但该命令在2400的时候,就会出现发完一个字节AA,后面会一直发字节E0
感觉和数据关断设置有关
如果不加SysCtlDelay(3*SysCtlClockGet() / (1000 * 3));
2400的时候,就正常
lizye
3楼-- · 2019-07-19 23:16
/**********************************************************         串口初始化设置 **********************************************************/

void UART_init(void)

{

//UART2  RS485   

ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART2);   

ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG);      

GPIOPinConfigure(GPIO_PG4_U2RX);   

GPIOPinConfigure(GPIO_PG5_U2TX);   

ROM_GPIOPinTypeUART(GPIO_PORTG_BASE, GPIO_PIN_4 | GPIO_PIN_5);//设定PG4 PG5为串口        

ROM_UARTConfigSetExpClk(UART2_BASE, ROM_SysCtlClockGet(), 1200, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |                              UART_CONFIG_PAR_NONE)); //设定  UART for 115200, 8-N-1 operation   

ROM_IntEnable(INT_UART2); //使能UART2中断   

ROM_UARTIntEnable(UART2_BASE, UART_INT_RX | UART_INT_RT);

}
/**********************************************************

              串口2中断

**********************************************************/

void UART2_Handler(void)

{

         uint32_t ui32Status;



    ui32Status = ROM_UARTIntStatus(UART2_BASE, true);

    //获取中断状态  屏蔽中断状态

  

    ROM_UARTIntClear(UART2_BASE, ui32Status);

    //清除UART中断源

  

    while(ROM_UARTCharsAvail(UART2_BASE))

    {

        //接收数据

                            data_buffer=ROM_UARTCharGetNonBlocking(UART2_BASE);            

                           

                            data_buffer_cfg=1;

    }

}

//*****************************************************************************

//

// 主       函    数

//

//*****************************************************************************

int main(void)

{

       //uint32_t  i;

      

    sys_init();  //系统初始化           

    UART_init(); //串口初始化

    Port_init(); //IO初始化

    ROM_IntMasterEnable();// 使能总中断

    GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,~GPIO_PIN_3); //RDE=0

   

    GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_5,~GPIO_PIN_5);

    GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_6,~GPIO_PIN_6); //LED亮

   

    while(1)

    {

           if(data_buffer_cfg==1)

           {

                  data_buffer_cfg=0;



                  ROM_IntDisable(INT_UART2);

                  GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,GPIO_PIN_3); //RDE=1

                            //data_buffer= 0xAA;

                            ROM_UARTCharPutNonBlocking(UART2_BASE, data_buffer);

                            //while(UARTBusy(UART2_BASE));   //等待发送完成   

                            delay();

                            ROM_IntEnable(INT_UART2);                 

                            GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,~GPIO_PIN_3); //RDE=0                    

                           

                      }

         

    }

}
zhaoxqi
4楼-- · 2019-07-20 01:42
 精彩回答 2  元偷偷看……
lizye
5楼-- · 2019-07-20 03:38

波特率1200 单独发AA,

如果只用以下

GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,GPIO_PIN_3); //RDE=1

ROM_UARTCharPutNonBlocking(UART2_BASE, data_buffer);

while(UARTBusy(UART2_BASE));     //等待发送完成   

结果显示 35

如果加延时1MS

SysCtlDelay(SysCtlClockGet() / (1000 * 3));

结果显示 75

如果加延时2MS

结果显示 F5

如果加延时3MS

才显示 AA



GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,GPIO_PIN_3); //RDE=1

ROM_UARTCharPutNonBlocking(UART2_BASE, data_buffer);

while(UARTBusy(UART2_BASE));     //等待发送完成   

SysCtlDelay(3*SysCtlClockGet() / (1000 * 3));  

GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,~GPIO_PIN_3); //RDE=0      



但该命令在2400的时候,就会出现发完一个字节AA,后面会一直发字节E0

感觉和数据关断设置有关


如果不加

SysCtlDelay(3*SysCtlClockGet() / (1000 * 3));

就正常

我感觉有点像1200发送时间太长,导致冲突

如果改用UARTCharPut能正常发送,但中断中把UARTCharGetNonBlocking改为UARTCharGet,就收不到数据  
wyjie
6楼-- · 2019-07-20 04:53
然后呢?你是怎么应对这个的呢

一周热门 更多>