打印

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

[复制链接]
1778|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
自民|  楼主 | 2014-6-25 11:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
波特率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的时候,就正常

相关帖子

沙发
自民|  楼主 | 2014-6-25 11:33 | 只看该作者
/**********************************************************         串口初始化设置 **********************************************************/

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                    

                           

                      }

         

    }

}

使用特权

评论回复
板凳
自民|  楼主 | 2014-6-25 17:13 | 只看该作者
顶一顶

使用特权

评论回复
地板
dirtwillfly| | 2014-6-25 20:58 | 只看该作者
建议发送一个字节,用示波器看下波形

使用特权

评论回复
5
自民|  楼主 | 2014-6-26 08:23 | 只看该作者
波特率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,就收不到数据  

使用特权

评论回复
6
自民|  楼主 | 2014-6-26 14:13 | 只看该作者
我早上用串口0,232 通信1200到115200都可以

连续发送,无需加发送完成判断或延时

而加了发送完成判断while(UARTBusy(UART2_BASE));,反而停止了,不知道为什么

使用特权

评论回复
7
shenmu2012| | 2014-6-26 21:40 | 只看该作者
这个是跟主频率或者UART所用的频率是相关的

使用特权

评论回复
8
dirtwillfly| | 2014-7-1 08:35 | 只看该作者
波特率不同,中间的延时要求是不同的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

47

主题

195

帖子

2

粉丝