搜索
bottom↓
回复: 16
打印 上一主题 下一主题

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

[复制链接]

出45入88汤圆

跳转到指定楼层
1
发表于 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 */

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出590入992汤圆

2
发表于 2019-9-22 19:57:48 | 只看该作者
估计是波特率算错了,之前的LPC1768都正常的。

出0入13汤圆

3
发表于 2019-9-22 20:24:33 来自手机 | 只看该作者
是不是哪里的系统时钟没设置正确,在某个波特率以下是允许范围内,其它波特率超了呢?

出45入88汤圆

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

换成外置晶振都是一样

出45入88汤圆

5
 楼主| 发表于 2019-9-22 21:45:20 | 只看该作者
SUPER_CRJ 发表于 2019-9-22 19:57
估计是波特率算错了,之前的LPC1768都正常的。

是不是这个原因?

本帖子中包含更多资源

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

x

出0入0汤圆

6
发表于 2019-9-23 08:15:17 | 只看该作者
小数部分设置没?

出45入88汤圆

7
 楼主| 发表于 2019-9-23 08:34:52 来自手机 | 只看该作者
Excellence 发表于 2019-9-23 08:15
小数部分设置没?

正在研究中

出0入18汤圆

8
发表于 2019-9-23 08:58:30 | 只看该作者
外设时钟 默认  25MHz   不能上到 115200   ,需要修改 外设时钟的。就这个问题。没别的问题。

出0入0汤圆

9
发表于 2019-9-23 09:49:55 | 只看该作者
本帖最后由 openmcu666 于 2019-9-23 09:51 编辑

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

出0入0汤圆

10
发表于 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

出0入0汤圆

11
发表于 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

出0入0汤圆

12
发表于 2019-9-23 10:49:13 | 只看该作者
LPC1768,,,,,,,,,,主频是96MHz.,不是100MHz.

出45入88汤圆

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

我的板是用12M晶振。

出45入88汤圆

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

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

出0入18汤圆

15
发表于 2019-9-24 17:46:50 | 只看该作者
Edesigner. 发表于 2019-9-23 11:03
我的板是用12M晶振。

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

出0入0汤圆

16
发表于 2019-9-24 17:53:57 | 只看该作者
系统时钟100M.,看串口外设时钟是多少?应该是你时钟设置问题

出45入88汤圆

17
 楼主| 发表于 2019-9-24 20:57:25 | 只看该作者
问题解决了,增加小数寄存器设置就可以了

本帖子中包含更多资源

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

x
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-17 05:33

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

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