[AT32F407] 【AT-START-F407测评】使用rtthread快速部署双串口UART1+UART2

[复制链接]
4388|3
 楼主| 北方西门吹雪 发表于 2021-2-19 15:44 | 显示全部楼层 |阅读模式
#申请原创#
  @21小跑堂

使用rtthread快速部署双串口UART1+UART2

1. 开始快速部署
      使用rtthread配合雅特力的开发,显然上手简单到令人发指,所以第一个帖子怎么写都像是灌水。那么,很有必要继续.......灌水,因为使用本次评测的板子的开发就更容易了。因为2021年2月1日,rtthread又更了一版,直接使用BSP支持这款AT-START-F407。   本帖介绍如何快速入手rtthread,使用isp tool,对照查找开发板的引脚和接口配置。
2、使用ISP tools
      不过,在此之前,需要先解决掉一个bug,就是每次使用rtthread都不能直接写程序的事情,这个应该是板子自带了一个16M的Flash,那么startup对位没搞好,使用的是pyocd来刷,没搞好。不过没有关系,可以下载使用用雅特力的isp工具弄一下,同时也熟悉一下原厂的应用工具。启动后页面如下,可以先升级at-link。这里还是吐槽一下stlink,自从升级到v3之后,v2的stlink都必须要升级才能连接芯片,这样操作不当已经搞了好几块成砖了。当然使用jlink可以返老还童,不过很不爽。在上一个帖子看到芯片的量产工具不打算再跟着stlink,深表理解,还是早脱钩自己飞的好,省得被动升级。
artek.001.PNG
点击连接,就可以快速读取芯片的完整信息,含ID号等等
artek.002.PNG

点击设备操作->主存储器擦除,显示擦除完成,
artek.003.PNG
3. 创建rtthread工程
首先需要下载安装rtthread studio,直接新建工程,参照下图,
artek.004.PNG
可以看到最新的bsp刚刚支持这个板子,都不用选择串口的PA9和PA10,后面可以看到,这个直接启动了全部的3个uart接口,分别对应PA9和PA10,PA2和PA3和PA11和PA12。
不过需要先下载最新的sdk才可以,按照提示操作则可。
artek.005.PNG
然后上电运行,显示的是出厂程序,3个LED灯流水行船。已经展示过就不再重述了。

4、使用并启动uart2
    再rtthread中,使用uart和启动adc等,再bsp配置好之后是同等难度的。都是用类似的流程和操作实现的,详见rtthread的文档,检索和使用都很快的。这里就以uart为例介绍一下。首先,看源代码
  1. int main(void)
  2. {
  3.     uint32_t Speed = 1000;
  4.     /* set LED2 pin mode to output */
  5.     rt_pin_mode(LED2_PIN, PIN_MODE_OUTPUT);
  6.     /* set LED3 pin mode to output */
  7.     //rt_pin_mode(LED3_PIN, PIN_MODE_OUTPUT);
  8.     /* set LED4 pin mode to output */
  9.     //rt_pin_mode(LED4_PIN, PIN_MODE_OUTPUT);

  10.     while (1)
  11.     {
  12.         rt_pin_write(LED2_PIN, PIN_LOW);
  13.         rt_thread_mdelay(Speed);
  14.         //rt_pin_write(LED3_PIN, PIN_LOW);
  15.         //rt_thread_mdelay(Speed);
  16.         //rt_pin_write(LED4_PIN, PIN_LOW);
  17.         //rt_thread_mdelay(Speed);
  18.         rt_pin_write(LED2_PIN, PIN_HIGH);
  19.         rt_thread_mdelay(Speed);
  20.         //rt_pin_write(LED3_PIN, PIN_HIGH);
  21.         //rt_thread_mdelay(Speed);
  22.         //rt_pin_write(LED4_PIN, PIN_HIGH);
  23.         //rt_thread_mdelay(Speed);
  24.     }
  25. }
注释掉的部分就是只保留一个灯blink一下就好了,重点是新定义一个uart2,然后初始化后启动,

  1. #define SAMPLE_UART_NAME       "uart2"
  2. static rt_device_t serial;

  3. static int uart2(void)
  4. {
  5.     rt_err_t ret = RT_EOK;
  6.     rt_size_t send_len = 0;

  7.     /* 查找系统中的串口设备 */
  8.     serial = rt_device_find(SAMPLE_UART_NAME);
  9.     if (!serial)
  10.     {
  11.         rt_kprintf("find %s failed!\n", SAMPLE_UART_NAME);
  12.         return -RT_ERROR;
  13.     }

  14.     /* 以中断接收及轮询发送模式打开串口设备 */
  15.     ret = rt_device_open(serial, RT_DEVICE_FLAG_INT_RX);
  16.     if (ret != RT_EOK)
  17.     {
  18.         rt_kprintf("open device failed\r\n");
  19.         return -RT_ERROR;
  20.     }
  21.     /* 发送字符串 */
  22.     send_len = rt_device_write(serial, 0, str, (sizeof(str) - 1));
  23.     if (send_len != sizeof(str) - 1)
  24.     {
  25.         rt_kprintf("send data failed\r\n");
  26.         return -RT_ERROR;
  27.     }
  28.     /* 关闭设备 */
  29.     ret = rt_device_close(serial);
  30.     if (ret != RT_EOK)
  31.     {
  32.         rt_kprintf("close device failed\r\n");
  33.         return -RT_ERROR;
  34.     }

  35.     //rt_kprintf("serial device test successful\r\n");
  36.     rt_kprintf("End of Uart2.\r\n");

  37.     return RT_EOK;
  38. }
  39. MSH_CMD_EXPORT(uart2, uart device sample);
这样就增加了一个MSH函数,不仅可以再程序中使用,也可以再msh交互界面直接调用,这里定义是不含参的,也可以定义了变参数的函数命令。这样运行后,系统自动启动了UART1作为控制台输入输出,然后自定义UART2作为和UART1交互的界面,uart1给uart2反馈“Try uart2 on Artery”,再uart1中显示串口启动成功,“serial device test successful”
详见下图的两个terminal,其中uart1使用的是rtthread自己启动的窗口,是调用putty显示的。显示的内容可以是
“Hello rt-thread.”

artek.007.PNG
另一个是“Try uart2 on Artery”
artek.008.PNG
调试成功。
具体的硬件连接如下,在丝印上选择PA2和PA3,
1886529037.jpg
对应连接在usb TTL的TX和RX接口上。
1162628109.jpg
具体需要阅读电路图,这样更便于使用。

5、上述过程看起来简单,但是还是踩了不少坑的。原来比较熟悉rtthread,但是这次rtthread更新比较大,原来在board.h中定义的功能选择都移到另一个文件中去,直接用scons定义,不用手动了。同时带来的问题就是不知道引脚如何定义,这个需要从msp目录下去找源码的说明,对照线路原理图才能识别。
    虽然,其他接口的使用也是非常简便,但是还是要提示一下,直接选择rtthread setting,进入图形化的外设和软件包选择界面,那么对应雅特力的探索才刚刚开始。
artek.009.PNG


数据采集存储 发表于 2021-2-19 18:41 | 显示全部楼层
这个帖子太棒了,感谢楼主的分享。不错的。
天明71 发表于 2021-8-11 15:31 | 显示全部楼层
请问RTT串口改引脚怎么改,单纯的把引脚函数改了,串口没法启动。

评论

我也测试了,改到串口2就不能启动了  发表于 2022-11-24 09:44
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

125

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部