在线时间52 小时
UID3914144
注册时间2023-4-15
NXP金币2714
TA的每日心情 | 开心 4 小时前 |
---|
签到天数: 131 天 [LV.7]常住居民III
高级会员
- 积分
- 680
- 最后登录
- 2024-4-27
|
【实现步骤】
1、在工程下面打开env工具,使用 menuconfig打开图形化配置工具,菜单Hardware Drivers Config → On-chip Peripheral Drivers → Enable UART。
打开uart4、uart5、uart2三个串口。
保存好后,使用scons —target=mdk5来生成工程。
由于工程的shell占用的是uart4,而uart2,我的开发板是没有引出的,所以使用uart5来做测试。uart5的TX为RX分P1_17、P1-16。
【代码实现】
1、在工程中添加uart的分组,新建一个uart.h与uart.c并把他加入分组与头文件中。
2、代码如下:
- #include "uart.h"
- #include <rtthread.h>
- #include <rtdevice.h>
- #include "string.h"
- #define UART_NAME "uart5"
- static rt_device_t serial;//串口设备句柄
- static struct rt_semaphore rx_sem;
- static rt_err_t uart_input(rt_device_t dev,rt_size_t size)//接收数据回调(消息队列处理)函数
- {
- rt_sem_release(&rx_sem);//串口接收数据产生中断,调用该函数发送接收信号量
- return RT_EOK;
- }
- static void serial_thread_entry(void* parameter)//串口处理线程函数
- {
- char ch;
- /* 接收到信号量后处理串口数据 */
- while(1)
- {
- while(rt_device_read(serial,-1,&ch,1)!=1)//阻塞等待接收信号量,等到信号量后读取1个字节的数据
- rt_sem_take(&rx_sem,RT_WAITING_FOREVER);
- ch;
- rt_device_write(serial,0,&ch,1);//读取到的数据通过串口错位输出
- }
- }
- static int uart_int_sample(int argc,char* argv[])//主函数
- {
- rt_err_t ret=RT_EOK;
- char uart_name[RT_NAME_MAX];
- char str[]="helloworld!\r\n";
-
- rt_strncpy(uart_name,UART_NAME,RT_NAME_MAX);
-
- serial=rt_device_find(uart_name);//查找串口设备
- if(!serial)
- {
- rt_kprintf("find %s failed!\n",uart_name);
- return RT_ERROR;
- }
- rt_kprintf("start mq\n");
-
-
-
- rt_device_open(serial,RT_DEVICE_FLAG_INT_RX);//以DMA接收及轮询方式打开串口
- rt_sem_init(&rx_sem,"rx_sem",0,RT_IPC_FLAG_FIFO);//初始化信号量
- rt_device_set_rx_indicate(serial,uart_input);//设置接收回调(消息队列处理)函数
- rt_device_write(serial,0,str,(sizeof(str)-1));//发送字符串
- rt_thread_t thread=rt_thread_create("serial",serial_thread_entry,RT_NULL,1024,25,10);//创建串口处理线程
- if(thread!=RT_NULL)
- {
- rt_kprintf("start thread\n");
- rt_thread_startup(thread);
- }
-
- else
- ret=RT_ERROR;
- return ret;//返回结果
- }
- MSH_CMD_EXPORT(uart_int_sample,uart device test);//调试指令
复制代码 3、【实验效果】
下载程序后,打开终端按tab键后可以找发现uart_int_sample在命令中了,执行uart_int_sample命令,并打开串口组手,接入uart5的串口。输入hello world以及其的字符,成功的返回
NXP虽然没有把这块板子添加到他们的工程中,但是可以实现RTT的移植。
|
|