打印
[AT32F407]

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

[复制链接]
3115|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#申请原创#
  @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,深表理解,还是早脱钩自己飞的好,省得被动升级。

点击连接,就可以快速读取芯片的完整信息,含ID号等等


点击设备操作->主存储器擦除,显示擦除完成,

3. 创建rtthread工程
首先需要下载安装rtthread studio,直接新建工程,参照下图,

可以看到最新的bsp刚刚支持这个板子,都不用选择串口的PA9和PA10,后面可以看到,这个直接启动了全部的3个uart接口,分别对应PA9和PA10,PA2和PA3和PA11和PA12。
不过需要先下载最新的sdk才可以,按照提示操作则可。

然后上电运行,显示的是出厂程序,3个LED灯流水行船。已经展示过就不再重述了。

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

    while (1)
    {
        rt_pin_write(LED2_PIN, PIN_LOW);
        rt_thread_mdelay(Speed);
        //rt_pin_write(LED3_PIN, PIN_LOW);
        //rt_thread_mdelay(Speed);
        //rt_pin_write(LED4_PIN, PIN_LOW);
        //rt_thread_mdelay(Speed);
        rt_pin_write(LED2_PIN, PIN_HIGH);
        rt_thread_mdelay(Speed);
        //rt_pin_write(LED3_PIN, PIN_HIGH);
        //rt_thread_mdelay(Speed);
        //rt_pin_write(LED4_PIN, PIN_HIGH);
        //rt_thread_mdelay(Speed);
    }
}
注释掉的部分就是只保留一个灯blink一下就好了,重点是新定义一个uart2,然后初始化后启动,

#define SAMPLE_UART_NAME       "uart2"
static rt_device_t serial;

static int uart2(void)
{
    rt_err_t ret = RT_EOK;
    rt_size_t send_len = 0;

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

    /* 以中断接收及轮询发送模式打开串口设备 */
    ret = rt_device_open(serial, RT_DEVICE_FLAG_INT_RX);
    if (ret != RT_EOK)
    {
        rt_kprintf("open device failed\r\n");
        return -RT_ERROR;
    }
    /* 发送字符串 */
    send_len = rt_device_write(serial, 0, str, (sizeof(str) - 1));
    if (send_len != sizeof(str) - 1)
    {
        rt_kprintf("send data failed\r\n");
        return -RT_ERROR;
    }
    /* 关闭设备 */
    ret = rt_device_close(serial);
    if (ret != RT_EOK)
    {
        rt_kprintf("close device failed\r\n");
        return -RT_ERROR;
    }

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

    return RT_EOK;
}
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.”


另一个是“Try uart2 on Artery”

调试成功。
具体的硬件连接如下,在丝印上选择PA2和PA3,

对应连接在usb TTL的TX和RX接口上。

具体需要阅读电路图,这样更便于使用。

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



使用特权

评论回复
沙发
数据采集存储| | 2021-2-19 18:41 | 只看该作者
这个帖子太棒了,感谢楼主的分享。不错的。

使用特权

评论回复
板凳
天明71| | 2021-8-11 15:31 | 只看该作者
请问RTT串口改引脚怎么改,单纯的把引脚函数改了,串口没法启动。

使用特权

评论回复
评论
MX@IOT 2022-11-24 09:44 回复TA
我也测试了,改到串口2就不能启动了 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

102

帖子

1

粉丝