中科蓝讯 UART 示例

    哈喽,大家好。

    今天给大家介绍一下 UART 的使用,以下内容以 AB5301A 展开。中科蓝讯 AB5301A 共有 3 个 UART,其中为了大家可以更方便地使用 UART,各个 UART 的 TX 和 RX 引脚均可以映射到两个 GPIO 引脚或以上。而 SDK 中默认打印使用的串口是 UART0,若需要使用 UART0 传送数据,则可以把打印用的串口移到 UART1。

    本文主要内容是,首先,以 PA3、PA4 做一个 UART 配置示例;然后,介绍如何把默认打印用的串口移到 UART1,希望在大家遇到相似情况时有所帮助。

一、UART 配置示例

    1、AB5301A 的 UART 引脚映射

    

    2、UART 相关寄存器

    ① FUNCMCON1

    端口功能映射控制寄存器1;因本文示例使用到的是串口 1 的 PA3 和 PA4 脚,根据前面的映射表可知这两个引脚用作串口 1 时映射到的是 G2,下表中所描述的位与此映射相关,可知,31:28 位和 27:24 位均需配置为 0010。该寄存器余下的位功能相似,不在此赘述,若需要可以查看  AB5301A 的 datasheet。

    

    ② UART1CON

    UART1 控制寄存器;下表只描述了该寄存器与 UART1 配置示例相关的几位,余下的位还有设置单线模式、停止位数、数据位数的,可自行查表;下表中需要特说指出的是 CLKSRC 位,该位用于选择 UART 的时钟源,推荐选择时钟源为 uart_inc。 因为 system clock 系统时钟在程序运行时可能会改变(如跑 KARAOK /无损解码等,会自动提升到 120M ),系统时钟改变会导致 UARTBAUD 需要重新计算。

    

    ③ UART1BAUD

    UART1 波特率寄存器;高 16 位设置接收的波特率,低 16 位设置发送的波特率,可根据需要分别设置。

    

    ④ UART1CPND

    UART1 清除挂起寄存器;

    



    ⑤ UART1DATA

    UART1 数据寄存器;

    

    3、程序实现

    ① UART1 的发送和接收函数

    

    此处接收函数接收到数据后,马上又把数据发送出去,以做测试。需要注意不可以在接收函数中增加打印,否则可能出现重启或者接收错误;并且串口接收和发送函数应放在 comm 区,亦即在函数前增加指令 AT(.com_text.uart)。

    ② UART1 初始化函数

    

    CLKCON1 |= BIT(14) 设置串口时钟源 uart_inc 来自于 x26m_div2;register_isr 函数的第二个参数要选择接收函数的函数名。

    最后把 UART1 的初始化函数放到系统初始化函数的最后的位置即可:

    

二、把默认打印串口从UART0改成UART1

    

   把默认打印串口从UART0改成UART1,不需要做过多更改,保持“一”的基本设置不变,删除初始化函数中的最后三句语句,然后在初始化函数中增加函数: my_printf_init(uart1_putc); 注册打印用的串口即可。

    中科蓝讯 AB5301A 以 PA3、PA4 做的 UART 配置示例和如何把默认打印用的串口移到 UART1就介绍到这里,希望可以在大家使用到串口通信时帮助到大家。如有错误欢迎大家批评指正。如果大家还有什么其他的问题或者功能想要询问,亦可以在评论区中提出,可以共同探讨,一起进步。

 

参考文档:

1、中科蓝讯蓝皮书《UART 串口》

2、AB5301A DataSheet.pdf

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论