查看: 14545|回复: 28

[原创] 【LPC824lite】UART简单使用

[复制链接]
  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16706
    最后登录
    1970-1-1
    发表于 2016-11-15 23:01:21 | 显示全部楼层 |阅读模式
    本帖最后由 lkl0305 于 2016-11-15 23:02 编辑

    UART串口在单片机中是非常重要的资源。而且现在有很多外设模块采用串口与MCU通信。这次分享一下我对LPC824lite串口的使用的体会。


    在LPC82X的MCU中有3个串口。分别是UART0、UART1、UART2。
    QQ截图20161115222325.jpg
    他们所包含的寄存器如下,相对还是比较简单的,当然,如果使用库编程,这些寄存器很多还是不需要过多了解,用到那个不清楚再看不迟。
    QQ截图20161115223740.jpg


    由于LPC824lite默认使用UART1映射到虚拟串口,所以为了测试学习,我采用UART0。
    当然首先要选择那个I/O引脚作为UART。
    由于LPC824lite具有开关矩阵功能,可以将功能映射到任意I/O,比较方便,这里我选择了P0.18和P0.19。
    QQ截图20161115223216.jpg
    首先要关闭默认的功能,查了一下数据手册,可以看到P0.18和P0.19默认给了ADC7和ADC8。
    QQ截图20161115222703.jpg
    因此使用下面函数关闭相关功能
    QQ截图20161115222732.jpg
    可以看到U0的引脚可以映射到P0.0-P0.28任意引脚
    QQ截图20161115222904.jpg
    使用如下函数映射到18和19引脚
    QQ截图20161115222751.jpg
    比照这相关虚拟串口首先对UART0进行初始化
    QQ截图20161115215921.jpg
    在主函数调用相关阻塞方式输出测试字符串。
    QQ截图20161115220000.jpg
    链接硬件,并将程序下载到开发板中
    QQ截图20161115225052.jpg
    可以看出使用虚拟串口输出的信息。
    QQ截图20161115221412.jpg
    自己写的UART0的测试输出也是正确的。
    QQ截图20161115221419.jpg


    这里简单所以下需要用到的一些库函数
    首先是UART的允许/使能函数
    QQ截图20161115220544.jpg
    这个是禁止/是能TX发送功能
    QQ截图20161115220559.jpg
    下面是初始化函数,当然还有一些其他的函数,这里就不过多说了。
    QQ截图20161115221625.jpg

    在使用UART发送接收数据使用的函数经常用到,库中提供了比较多,而且成对出现,分别是:

    这个是非阻塞方式下的发送和接收若干字节函数,由于是非阻塞方式,在使用时一般配合中断使用
    QQ截图20161115221655.jpg
    下面是阻塞方式下的发送和接收函数,接收和发送指定字节的数据后函数才返回,这里注意没有设定超时时间。
    QQ截图20161115221720.jpg
    下面这个是LPC824lite库中特有的,串行发送和接收数据时,使用环形数据缓冲区方式,也是一种常用的方法。
    QQ截图20161115221910.jpg

    在使用库函数进行串口操作时,一定要选择好相应的函数,比如阻塞与非阻塞,是否采用环形缓冲器等。
    最后上一下测试程序:

    1. #if defined (__USE_LPCOPEN)
    2. #if defined(NO_BOARD_LIB)
    3. #include "chip.h"
    4. #else
    5. #include "board.h"
    6. #endif
    7. #endif

    8. #include <cr_section_macros.h>

    9. // TODO: insert other include files here
    10. #include "delay/delay.h"

    11. // TODO: insert other definitions and declarations here

    12. const uint8_t txBuffer[] = "Hello, world! this is a test of UART0!\r\n";
    13. /***********************************************************
    14. * 设置P0.18和P0.19为USART0的引脚
    15. * 配置为数据位8,停止位1,无校验,波特率115200bps,
    16. ***********************************************************/
    17. void Uart0_Init(void)
    18. {
    19.         Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_SWM);

    20.         Chip_SWM_DisableFixedPin(SWM_FIXED_ADC7);
    21.         Chip_SWM_DisableFixedPin(SWM_FIXED_ADC8);

    22.         Chip_Clock_SetUARTClockDiv(1);

    23.         Chip_SWM_MovablePinAssign(SWM_U0_TXD_O, 18);
    24.         Chip_SWM_MovablePinAssign(SWM_U0_RXD_I, 19);

    25.         Chip_Clock_DisablePeriphClock(SYSCTL_CLOCK_SWM);

    26.         Chip_UART_Init(LPC_USART0);
    27.         Chip_UART_ConfigData(LPC_USART0, UART_CFG_DATALEN_8 | UART_CFG_PARITY_NONE | UART_CFG_STOPLEN_1);
    28.         Chip_Clock_SetUSARTNBaseClockRate((115200 * 6 * 16), true);
    29.         Chip_UART_SetBaud(LPC_USART0, 115200);
    30.         Chip_UART_Enable(LPC_USART0);
    31.         Chip_UART_TXEnable(LPC_USART0);
    32. }

    33. int main(void) {

    34. #if defined (__USE_LPCOPEN)
    35.     // Read clock settings and update SystemCoreClock variable
    36.     SystemCoreClockUpdate();
    37. #if !defined(NO_BOARD_LIB)
    38.     // Set up and initialize all required blocks and
    39.     // functions related to the board hardware
    40.     Board_Init();
    41.     // Set the LED to the state of "On"
    42.     Board_LED_Set(0, true);
    43. #endif
    44. #endif

    45.     // TODO: insert code here
    46.     DelayInit(SystemCoreClock);

    47.     Uart0_Init();

    48.     // Force the counter to be placed into memory
    49.     volatile static int i = 0 ;
    50.     // Enter an infinite loop, just incrementing a counter
    51.     while(1) {
    52.             Chip_UART_SendBlocking(LPC_USART0, txBuffer, sizeof(txBuffer));
    53.             DEBUGSTR("Hello, world!\r\n");
    54.             DelayMs(2000);
    55.         i++ ;
    56.     }
    57.     return 0 ;
    58. }
    复制代码



    回复

    使用道具 举报

  • TA的每日心情
    开心
    2025-5-29 08:54
  • 签到天数: 2992 天

    连续签到: 8 天

    [LV.Master]伴坛终老

    45

    主题

    5548

    帖子

    22

    金牌会员

    Rank: 6Rank: 6

    积分
    12035
    最后登录
    2025-5-29
    发表于 2016-11-15 23:17:10 | 显示全部楼层
    好详细的帖子,赞一个。
    签到签到
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-5-24 10:39
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    140

    主题

    2087

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3913
    最后登录
    2020-5-24
    发表于 2016-11-15 23:48:51 | 显示全部楼层
    为什么要用串口下载,生成bin文件之间拖进去不行?
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16706
    最后登录
    1970-1-1
     楼主| 发表于 2016-11-16 00:06:57 | 显示全部楼层
    limale 发表于 2016-11-15 23:17
    好详细的帖子,赞一个。

    多谢支持
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2022-6-3 10:27
  • 签到天数: 131 天

    连续签到: 1 天

    [LV.7]常住居民III

    19

    主题

    519

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1612
    最后登录
    2022-6-26
    发表于 2016-11-16 06:54:08 | 显示全部楼层
    有趣学习了
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2017-1-16 12:20
  • 签到天数: 16 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    12

    主题

    653

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1667
    最后登录
    2022-5-2
    发表于 2016-11-16 07:53:48 | 显示全部楼层
    写的很详细
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-6-18 08:45
  • 签到天数: 812 天

    连续签到: 1 天

    [LV.10]以坛为家III

    66

    主题

    4899

    帖子

    64

    金牌会员

    Rank: 6Rank: 6

    积分
    6321
    最后登录
    2025-7-15
    发表于 2016-11-16 08:23:51 | 显示全部楼层
    建议串口采用DMA好些,环形缓冲会占用更多的系统资源,DMA可以更好释放MCU
    开心
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-10-17 08:07
  • 签到天数: 273 天

    连续签到: 1 天

    [LV.8]以坛为家I

    74

    主题

    2338

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    7508
    最后登录
    2021-8-30
    发表于 2016-11-16 08:26:35 | 显示全部楼层
    不错的帖子,很详细
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    连续签到: 1 天

    [LV.3]偶尔看看II

    85

    主题

    1629

    帖子

    1

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    2569

    优秀版主

    最后登录
    2019-3-28
    发表于 2016-11-16 09:31:11 | 显示全部楼层
    我最讨厌发帖子贴图了,不好整理
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2025-7-4 08:15
  • 签到天数: 336 天

    连续签到: 2 天

    [LV.8]以坛为家I

    3

    主题

    1562

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    5778
    最后登录
    2025-7-15
    发表于 2016-11-16 11:02:44 | 显示全部楼层
    写得很详细,顶一个
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-24 15:32 , Processed in 0.108646 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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