搜索
bottom↓
回复: 16

lpc1754串口0,按照demo,设置波特率57600及以下正确115200不正常

[复制链接]
(73716226)

出45入88汤圆

发表于 2019-9-22 18:28:50 | 显示全部楼层 |阅读模式
打出来是乱码,有这方面经验的网友提供一下解决方法好吗?

LPC_PINCON->PINSEL0 &= ~0x000000F0;
        LPC_PINCON->PINSEL0 |= 0x00000050;  /* RxD0 is P0.3 and TxD0 is P0.2 */
        /* By default, the PCLKSELx value is zero, thus, the PCLK for
        all the peripherals is 1/4 of the SystemFrequency. */
        /* Bit 6~7 is for UART0 */
        pclkdiv = (LPC_SC->PCLKSEL0 >> 6) & 0x03;
        switch ( pclkdiv )
        {
          case 0x00:
          default:
                pclk = SystemFrequency/4;
                break;
          case 0x01:
                pclk = SystemFrequency;
                break;
          case 0x02:
                pclk = SystemFrequency/2;
                break;
          case 0x03:
                pclk = SystemFrequency/8;
                break;
        }

    LPC_UART0->LCR = 0x83;                /* 8 bits, no Parity, 1 Stop bit */
        Fdiv = ( pclk / 16 ) / baudrate ;        /*baud rate */
    LPC_UART0->DLM = Fdiv / 256;                                                       
    LPC_UART0->DLL = Fdiv % 256;
        LPC_UART0->LCR = 0x03;                /* DLAB = 0 */
    LPC_UART0->FCR = 0x07;                /* Enable and reset TX and RX FIFO. */

           NVIC_EnableIRQ(UART0_IRQn);

    LPC_UART0->IER = IER_RBR | IER_THRE | IER_RLS;        /* Enable UART0 interrupt */
(73710888)

出485入947汤圆

发表于 2019-9-22 19:57:48 | 显示全部楼层
估计是波特率算错了,之前的LPC1768都正常的。
(73709283)

出0入0汤圆

发表于 2019-9-22 20:24:33 来自手机 | 显示全部楼层
是不是哪里的系统时钟没设置正确,在某个波特率以下是允许范围内,其它波特率超了呢?
(73705661)

出45入88汤圆

 楼主| 发表于 2019-9-22 21:24:55 | 显示全部楼层
weiwei4 发表于 2019-9-22 20:24
是不是哪里的系统时钟没设置正确,在某个波特率以下是允许范围内,其它波特率超了呢? ...

换成外置晶振都是一样
(73704436)

出45入88汤圆

 楼主| 发表于 2019-9-22 21:45:20 | 显示全部楼层
SUPER_CRJ 发表于 2019-9-22 19:57
估计是波特率算错了,之前的LPC1768都正常的。

是不是这个原因?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
(73666639)

出0入0汤圆

发表于 2019-9-23 08:15:17 | 显示全部楼层
小数部分设置没?
(73665464)

出45入88汤圆

 楼主| 发表于 2019-9-23 08:34:52 来自手机 | 显示全部楼层
Excellence 发表于 2019-9-23 08:15
小数部分设置没?

正在研究中
(73664046)

出0入0汤圆

发表于 2019-9-23 08:58:30 | 显示全部楼层
外设时钟 默认  25MHz   不能上到 115200   ,需要修改 外设时钟的。就这个问题。没别的问题。
(73660961)

出0入0汤圆

发表于 2019-9-23 09:49:55 | 显示全部楼层
本帖最后由 openmcu666 于 2019-9-23 09:51 编辑

试试这个 Fdiv = (25000000/16) / baudrate;// 设置波特率, 看串口外设时钟是多少
(73657481)

出0入0汤圆

发表于 2019-9-23 10:47:55 | 显示全部楼层
void                        Uart1Init(void)
{

        LPC_SC->PCONP         |= PCUART1;

        //P2.0   TXD1,  P2.1   RXD1
        //LPC_PINCON->PINSEL4 =(LPC_PINCON->PINSEL4&(~(0x03 << (2 *UART_TXD1_NUM))))|(SECONDFUNC<<(2*UART_TXD1_NUM));
        //LPC_PINCON->PINSEL4 =(LPC_PINCON->PINSEL4&(~(0x03 << (2 *UART_RXD1_NUM))))|(SECONDFUNC<<(2*UART_RXD1_NUM));
        //P0.15  TXD1,  P0.16  RXD1
        LPC_PINCON->PINSEL0 =(LPC_PINCON->PINSEL0&(~((unsigned int)0x03 << (2 *UART_TXD1_NUM))))                |(FIRSTFUNC<<(2*UART_TXD1_NUM));
        LPC_PINCON->PINSEL1 =(LPC_PINCON->PINSEL1&(~(0x03 << (2 *(UART_RXD1_NUM-16)))))|(FIRSTFUNC<<(2*(UART_RXD1_NUM-16)));
       
       
           LPC_UART1->LCR = 0x83;                       


        //24M:9600--125     115200--13  57600--17  //十进制
           LPC_UART1->DLM = 0;///Fdiv / 256;                                                       
        LPC_UART1->DLL = 125;///Fdiv % 256;            
        LPC_UART1->LCR = ((U1_DATA_BIT)|(U1_STOP_BIT<<2)|(U1_CHECK_BIT_EN<<3)|(U1_CHECK_BIT<<4));
           LPC_UART1->IER = 0x03;                       // Enable RDA and THRE interrupts
        LPC_UART1->FCR = 0xc7;


        //24M:9600--0X41   115200--0X20   57600--0XF8

        LPC_UART1->FDR = 0x41;
       
    NVIC_SetPriority(UART1_IRQn,2);

        NVIC_EnableIRQ(UART1_IRQn);                                        /* 使能I2C中断         */


}  // End of UART0 initialize function
(73657451)

出0入0汤圆

发表于 2019-9-23 10:48:25 | 显示全部楼层
void                        Uart3Init(void)
{
        //uint16  Fdiv;               


        LPC_SC->PCONP         |= PCUART3;

        //P0.0 TXD3,         P0.1 RXD3
        //LPC_PINCON->PINSEL0 =(LPC_PINCON->PINSEL0&(~(0x03 << (2 *UART_TXD3_NUM))))|(SECONDFUNC<<(2*UART_TXD3_NUM));
        //LPC_PINCON->PINSEL0 =(LPC_PINCON->PINSEL0&(~(0x03 << (2 *UART_RXD3_NUM))))|(SECONDFUNC<<(2*UART_RXD3_NUM));

        //P0.25 TXD3,         P0.26 RXD3
        //LPC_PINCON->PINSEL1 =(LPC_PINCON->PINSEL1&(~(0x03 << (2 *(UART_TXD3_NUM-16)))))|(THIRDFUNC<<(2*(UART_TXD3_NUM-16)));
        //LPC_PINCON->PINSEL1 =(LPC_PINCON->PINSEL1&(~(0x03 << (2 *(UART_RXD3_NUM-16)))))|(THIRDFUNC<<(2*(UART_RXD3_NUM-16)));

        //P4.28 TXD3,         P4.29 RXD3
        LPC_PINCON->PINSEL9 =(LPC_PINCON->PINSEL9&(~(0x03 << (2 *(UART_TXD3_NUM-16)))))|(THIRDFUNC<<(2*(UART_TXD3_NUM-16)));
        LPC_PINCON->PINSEL9 =(LPC_PINCON->PINSEL9&(~(0x03 << (2 *(UART_RXD3_NUM-16)))))|(THIRDFUNC<<(2*(UART_RXD3_NUM-16)));

       
       
           LPC_UART3->LCR = 0x83;                       
        //Fdiv = (25000000UL / 16) / UART0_BPS;    // set baudrate

        //12M:9600--71     115200--6   57600--13  //十进制
        //18M:9600--X     115200--x   57600--11  //十进制
        //24M:9600--125     115200--13  57600--17  //十进制
        //25M:9600--92     115200--10  57600--19  //十进制
           LPC_UART3->DLM = 0;///Fdiv / 256;                                                       
        LPC_UART3->DLL = 17;///Fdiv % 256;            
        LPC_UART3->LCR = ((U3_DATA_BIT)|(U3_STOP_BIT<<2)|(U3_CHECK_BIT_EN<<3)|(U3_CHECK_BIT<<4));
           LPC_UART3->IER = 0x03;                       // Enable RDA and THRE interrupts
        LPC_UART3->FCR = 0xc7;

        //12M:9600--0XA1   115200--0XC1   57600--0X20 D=0,M=2
        //18M:9600--X   115200--X             57600--0X97 D=7,M=9
        //24M:9600--0X41   115200--0X20   57600--0XF8 D=8,M=F
        //25M:9600--0XDA   115200--0XE5   57600--0X73 D=3,M=7
        LPC_UART3->FDR = 0xF8;
       
    NVIC_SetPriority(UART3_IRQn, 4);

        NVIC_EnableIRQ(UART3_IRQn);                                        /* 使能I2C中断         */


}  // End of UART0 initialize function
(73657403)

出0入0汤圆

发表于 2019-9-23 10:49:13 | 显示全部楼层
LPC1768,,,,,,,,,,主频是96MHz.,不是100MHz.
(73656517)

出45入88汤圆

 楼主| 发表于 2019-9-23 11:03:59 | 显示全部楼层
dengxiaofeng 发表于 2019-9-23 08:58
外设时钟 默认  25MHz   不能上到 115200   ,需要修改 外设时钟的。就这个问题。没别的问题。 ...

我的板是用12M晶振。
(73656460)

出45入88汤圆

 楼主| 发表于 2019-9-23 11:04:56 | 显示全部楼层
openmcu666 发表于 2019-9-23 09:49
试试这个 Fdiv = (25000000/16) / baudrate;// 设置波特率, 看串口外设时钟是多少

用12M晶振要小数才行的。9600倒是可以
(73545946)

出0入0汤圆

发表于 2019-9-24 17:46:50 | 显示全部楼层
Edesigner. 发表于 2019-9-23 11:03
我的板是用12M晶振。

和你板子晶体 啥关系   内部PLL到 100M的
(73545519)

出0入0汤圆

发表于 2019-9-24 17:53:57 | 显示全部楼层
系统时钟100M.,看串口外设时钟是多少?应该是你时钟设置问题
(73534511)

出45入88汤圆

 楼主| 发表于 2019-9-24 20:57:25 | 显示全部楼层
问题解决了,增加小数寄存器设置就可以了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 ( 公安交互式论坛备案:44190002001997 粤ICP备09047143号 )

GMT+8, 2022-1-22 23:12

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表