查看: 4766|回复: 3

[分享] 城里人真会玩---LPC4337串口自动波特率

[复制链接]
  • TA的每日心情

    2017-1-4 08:05
  • 签到天数: 11 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    85

    主题

    1629

    帖子

    1

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    2569

    优秀版主

    最后登录
    2019-3-28
    发表于 2016-12-17 13:47:44 | 显示全部楼层 |阅读模式
    城里人真会玩---LPC4337串口自动波特率

       USART自动波特率功能可用于测量基于的入站波特率“AT”协议(Hayes命令)如果启用,自动波特率功能将测量该位时间,并设置除数锁存寄存器DLM和DLL因此。
       通过设置ACR启动位来启动自动波特率。自动波特率可以通过清零来停止ACR启动位。自动波特率完成并读取该位后,启动位将清零将返回自动波特率的状态(挂起/完成)。
       有两种自动波特率测量模式可供选择,可由ACR模式选择位。在模式0中,波特率在USART的两个连续下降沿上测量Rx引脚(起始位的下降沿和最低有效位的下降沿)。在模式1下,波特率在下降沿和随后的上升沿之间测量USART Rx引脚的边沿(起始位的长度)。ACR AutoRestart位可用于自动重新启动波特率测量,如果a发生超时(速率测量计数器溢出)。如果该位置位,速率测量将在USART Rx引脚的下一个下降沿重新启动。自动波特率功能可以产生两个中断。
       ?如果中断使能(IER ABToIntEn置1),则IIR ABTOInt中断将置1并且自动波特率测量计数器溢出)。
       ?如果中断使能,则IIR ABEOInt中断将置1(IER ABEOIntEn置1并且自动波特率已成功完成)。必须通过设置相应的ACR来清除自动波特率中断ABTOIntClr和ABEOIntEn位。
               在自动波特率期间,小数波特率发生器必须禁用(DIVADDVAL = 0)。此外,当使用自动波特率时,应该先对DLM和DLL寄存器进行写操作ACR寄存器写。 USART支持的最小和最大波特率为USART_PCLK的功能,数据位数,停止位和奇偶校验位。   功能还是很强大的,具体的请看用户手册的Chapter 40: LPC43xx/LPC43Sxx USART0_2_3这一部分比我讲的详细多了。
              在使用时要借助串口的接收中断,以及要打开最重要的Auto-Bau中断,具体看代码吧

    [code]/*
         *  PIN Mux to UART
         */
        scu_pinmux(2, 0, MD_PDN, FUNC1);                                    /* P2.00 -> UART0_TXD           */
        scu_pinmux(2, 1, MD_PLN | MD_EZI | MD_ZI, FUNC1);                   /* P2.01 -> UART0_RXD           */

        /*
         *  Config the uart bau..
         */
        UARTConfigStruct.Baud_rate   = 115200;                              /* Baudrate          = 115200bps*/
        UARTConfigStruct.Databits    = UART_DATABIT_8;                      /* Word Length Select=8 data bit*/
        UARTConfigStruct.Parity      = UART_PARITY_NONE;                    /* Parity Select   = None parity*/
        UARTConfigStruct.Stopbits    = UART_STOPBIT_1;                      /*  Stop Bit Select = 1 Stop bit*/
        UARTConfigStruct.Clock_Speed = 0;
        UART_Init(LPC_USART0, &UARTConfigStruct);

        /*
         * Config the UART FIFO
         */
        UARTFIFOConfigStruct.FIFO_DMAMode    = DISABLE;                     /* FIFO_DMAMode    = DISABLE    */
        UARTFIFOConfigStruct.FIFO_Level      = UART_FIFO_TRGLEV2;           /* FIFO_Level=UART_FIFO_TRGLEV0 */
        UARTFIFOConfigStruct.FIFO_ResetRxBuf = ENABLE;                      /* FIFO_ResetRxBuf = ENABLE     */
        UARTFIFOConfigStruct.FIFO_ResetTxBuf = ENABLE;                      /* FIFO_ResetTxBuf = ENABLE     */
        UART_FIFOConfig(LPC_USART0, &UARTFIFOConfigStruct);                  /* FIFO_State      = ENABLE     */

        /*  
         *  Config UART Interrupt
         */
        UART_IntConfig((LPC_USARTn_Type *)LPC_USART0, UART_INTCFG_ABEO, ENABLE);
        UART_IntConfig((LPC_USARTn_Type *)LPC_USART0, UART_INTCFG_ABTO, ENABLE);
        NVIC_SetPriority(USART0_IRQn, 1);
        NVIC_EnableIRQ(USART0_IRQn);

    回复

    使用道具 举报

  • TA的每日心情
    开心
    2025-1-21 08:52
  • 签到天数: 861 天

    连续签到: 1 天

    [LV.10]以坛为家III

    75

    主题

    2523

    帖子

    24

    金牌会员

    Rank: 6Rank: 6

    积分
    5867
    最后登录
    2025-1-22
    发表于 2016-12-17 14:30:47 | 显示全部楼层
    谢谢分享
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2017-10-15 13:16
  • 签到天数: 191 天

    连续签到: 1 天

    [LV.7]常住居民III

    11

    主题

    664

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1722
    最后登录
    2017-10-15
    发表于 2016-12-17 15:31:14 | 显示全部楼层
    谢谢分享               
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-21 22:28 , Processed in 0.083311 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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