开发板:新新新nk-980iot v1.0
:rt-thread Studio 2.1.5 nuWriter 1.0.0.0.0.1本
讲述一下核心-ARM926EJ-S,最高运行速度300MHz-16KB指令高速缓存(I-cache)和16KB数据高速缓存(D-cache).DDR-64 MB DDR Il内存
1.板载UART介绍,可以提供10最需全双工UART,支持10类中断,具体详情可以查询NUC980系列数据表。
测试介绍3.及与文档
工程建立及测试
首先开发板开发板模板模板工程工程工程,rt-thread设置中uart,uart uart,因为uart仍然属于片上所有的10路UART,其中UART0连接了VCOM被占用,根据NUC980IOT原理图,我们选择开启UART1即可,如图。
我们可以在工程下的libraries/nuc980/rtt_port/drv_uART中探到c。被
进入编写,不中断发送发送,直接发送发送发送发送发送打开串口串口发送发送发送发送信息信息,发送,发送后,点亮串口串口NK-980IOT测评之UART测评工具体代号如下
/************************************************************************//
*
[url=home.php?mod=space&uid=855824]@copyright[/url] (C) 2019 Nuvoton Technology Corp. All rights reserved.
SPDX-License-Identifier: Apache-2.0
Change Logs:
Date Author Notes
2020-12-12 Wayne First version
******************************************************************************/
#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>
#include <drv_gpio.h>
#define LED_R NU_GET_PININDEX(NU_PB, 13)
void uart_api_init(void);
static rt_device_t serial;
int main(void parameter)
{
// char ch;
rt_pin_mode(LED_R, PIN_MODE_OUTPUT);
uart_api_init();
uint8_t ch=0x00;
while (1)
{;
rt_device_open(serial, RT_DEVICE_FLAG_INT_RX);
rt_device_write(serial, 0, &ch, 1);
rt_device_close(serial);
rt_pin_write(LED_R, PIN_LOW);
rt_thread_mdelay(100);
}
}
void uart_api_init(void)
{
/ 串口设备句柄 /
struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT; / 初始化配置参数 /
/ step1:查找串口设备 /
serial = rt_device_find("uart1");
/ step2:修改串口配置参数 /
config.baud_rate = 115200; //修改波特率为 115200
config.data_bits = DATA_BITS_8; //数据位 8
config.stop_bits = STOP_BITS_1; //停止位 1
config.bufsz = 128; //修改缓冲区 buff size 为 128
config.parity = PARITY_NONE; //无奇偶校验位
/ step3:控制串口设备。通过控制接口传入命令控制字,与控制参数 */
rt_device_control(serial, RT_DEVICE_CTRL_CONFIG, &config);
}
Github工程地址https://github.com/Dlmu-LCC/NUC980IOTUART
本工程刚刚发现uart发送的需要,如需要实际UART接收可参照RT-ThreadAPI参考手册中的UART外设绅士,作为中断,当串口接收数据后的的的函数函数函数
/*
Copyright (c) 2006-2018, RT-Thread Development Team
SPDX-License-Identifier: Apache-2.0
Change Logs:
Date Author Notes
2018-08-15 misonyo first implementation.
/
/
程序清单:这是一个 串口 设备使用例程
例程导出了 uart_sample 命令到控制终端
命令调用格式:uart_sample uart2
命令解释:命令第二个参数是要使用的串口设备名称,为空则使用默认的串口设备
程序功能:通过串口输出字符串"hello RT-Thread!",然后错位输出输入的字符
/
#include <rtthread.h>
#define SAMPLE_UART_NAME "uart2" / 串口设备名称 /
/ 用于接收消息的信号量 /
static struct rt_semaphore rx_sem;
static rt_device_t serial;
/ 接收数据回调函数 /
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)
{
/ 阻塞等待接收信号量,等到信号量后再次读取数据 /
rt_sem_take(&rx_sem, RT_WAITING_FOREVER);
}
/ 读取到的数据通过串口错位输出 */
ch = ch + 1;
rt_device_write(serial, 0, &ch, 1);
}
}
static int uart_sample(int argc, char argv[])
{
rt_err_t ret = RT_EOK;
char uart_name[RT_NAME_MAX];
char str[] = "hello RT-Thread!\r\n";
if (argc == 2)
{
rt_strncpy(uart_name, argv[1], RT_NAME_MAX);
}
else
{
rt_strncpy(uart_name, SAMPLE_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_sem_init(&rx_sem, "rx_sem", 0, RT_IPC_FLAG_FIFO);
/ 以读写及中断接收方式打开串口设备 /
rt_device_open(serial, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX);
/ 设置接收回调函数 /
rt_device_set_rx_indicate(serial, uart_input);
/ 发送字符串 /
rt_device_write(serial, 0, str, (sizeof(str) - 1));
/ 创建 serial 线程 /
rt_thread_t thread = rt_thread_create("serial", serial_thread_entry, RT_NULL, 1024, 25, 10);
/ 创建成功则启动线程 /
if (thread != RT_NULL)
{
rt_thread_startup(thread);
}
else
{
ret = RT_ERROR;
}
return ret;
}
/ 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(uart_sample, uart device sample);
4.烧录,使用nuWriter连接usb0device,选择nuc980dk61y.ini,在选择中中中中刚才rtthread debug \ rtthread.bin.bin,点击re-reconnect,re re-connect,re-connect,re-connect,确认Rx1和tx1,上述两个实现实现实现
原作者:DLMU_lcc
更多回帖