查看: 209|回复: 2

[原创] NXP MCXN947测评之 RT-Thread uart 测试

[复制链接]
  • TA的每日心情
    开心
    4 小时前
  • 签到天数: 131 天

    [LV.7]常住居民III

    9

    主题

    291

    帖子

    0

    高级会员

    Rank: 4

    积分
    680
    最后登录
    2024-4-27
    发表于 2024-3-22 22:09:52 | 显示全部楼层 |阅读模式
    【实现步骤】
    1、在工程下面打开env工具,使用 menuconfig打开图形化配置工具,菜单Hardware Drivers Config → On-chip Peripheral Drivers → Enable UART。
    微信截图_20240322220246.png
    打开uart4、uart5、uart2三个串口。
    保存好后,使用scons —target=mdk5来生成工程。
    微信截图_20240322220434.png
    由于工程的shell占用的是uart4,而uart2,我的开发板是没有引出的,所以使用uart5来做测试。uart5的TX为RX分P1_17、P1-16。
    微信截图_20240322220516.png
    【代码实现】
    1、在工程中添加uart的分组,新建一个uart.h与uart.c并把他加入分组与头文件中。
    微信截图_20240322220700.png
    2、代码如下:

    1. #include "uart.h"
    2. #include <rtthread.h>
    3. #include <rtdevice.h>
    4. #include "string.h"
    5. #define UART_NAME "uart5"



    6. static rt_device_t serial;//串口设备句柄
    7. static struct rt_semaphore rx_sem;

    8. static rt_err_t uart_input(rt_device_t dev,rt_size_t size)//接收数据回调(消息队列处理)函数
    9. {
    10.     rt_sem_release(&rx_sem);//串口接收数据产生中断,调用该函数发送接收信号量
    11.     return RT_EOK;
    12. }

    13. static void serial_thread_entry(void* parameter)//串口处理线程函数
    14. {
    15.     char ch;
    16.     /* 接收到信号量后处理串口数据 */
    17.     while(1)
    18.     {
    19.         while(rt_device_read(serial,-1,&ch,1)!=1)//阻塞等待接收信号量,等到信号量后读取1个字节的数据
    20.             rt_sem_take(&rx_sem,RT_WAITING_FOREVER);
    21.         ch;
    22.                                 rt_device_write(serial,0,&ch,1);//读取到的数据通过串口错位输出
    23.     }

    24. }

    25. static int uart_int_sample(int argc,char* argv[])//主函数
    26. {
    27.     rt_err_t ret=RT_EOK;
    28.     char uart_name[RT_NAME_MAX];

    29.     char str[]="helloworld!\r\n";
    30.    

    31.     rt_strncpy(uart_name,UART_NAME,RT_NAME_MAX);
    32.    
    33.     serial=rt_device_find(uart_name);//查找串口设备
    34.     if(!serial)
    35.     {
    36.         rt_kprintf("find %s failed!\n",uart_name);
    37.         return RT_ERROR;
    38.     }
    39.     rt_kprintf("start mq\n");

    40.                

    41.    
    42.     rt_device_open(serial,RT_DEVICE_FLAG_INT_RX);//以DMA接收及轮询方式打开串口
    43.                 rt_sem_init(&rx_sem,"rx_sem",0,RT_IPC_FLAG_FIFO);//初始化信号量
    44.                 rt_device_set_rx_indicate(serial,uart_input);//设置接收回调(消息队列处理)函数
    45.     rt_device_write(serial,0,str,(sizeof(str)-1));//发送字符串
    46.     rt_thread_t thread=rt_thread_create("serial",serial_thread_entry,RT_NULL,1024,25,10);//创建串口处理线程
    47.     if(thread!=RT_NULL)
    48.                 {
    49.                                 rt_kprintf("start thread\n");
    50.         rt_thread_startup(thread);
    51.                 }
    52.                                
    53.     else
    54.         ret=RT_ERROR;
    55.     return ret;//返回结果
    56. }

    57. MSH_CMD_EXPORT(uart_int_sample,uart device  test);//调试指令


    复制代码
    3、【实验效果】
    下载程序后,打开终端按tab键后可以找发现uart_int_sample在命令中了,执行uart_int_sample命令,并打开串口组手,接入uart5的串口。输入hello world以及其的字符,成功的返回
    微信截图_20240322220834.png
    NXP虽然没有把这块板子添加到他们的工程中,但是可以实现RTT的移植。

    哎...今天够累的,签到来了~
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-3-30 01:54
  • 签到天数: 2 天

    [LV.1]初来乍到

    4

    主题

    53

    帖子

    0

    注册会员

    Rank: 2

    积分
    191
    最后登录
    2024-4-27
    发表于 2024-3-29 10:56:20 | 显示全部楼层
    你好,我想问一下是如何下载程序进去的呀
    好难啊
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    4 小时前
  • 签到天数: 131 天

    [LV.7]常住居民III

    9

    主题

    291

    帖子

    0

    高级会员

    Rank: 4

    积分
    680
    最后登录
    2024-4-27
     楼主| 发表于 2024-3-29 11:36:33 | 显示全部楼层
    eefocus_3963857 发表于 2024-3-29 10:56
    你好,我想问一下是如何下载程序进去的呀

    可以用stlink,也可以用ISP下载,很多种方式。
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-4-27 13:58 , Processed in 0.208509 second(s), 21 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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