IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> K210应用5-使用查询方式通过UART接收数据 -> 正文阅读

[嵌入式]K210应用5-使用查询方式通过UART接收数据

使用查询方式通过UART接收数据

  • 实验目的

????????本节实验目的为实现串口发送和接收。这一节计划采取查询的方式来实现串口接收,K210串口接收到0x00,则熄灭前节提到的红色LED灯,并通过串口打印Red Led Off,否则,则点亮前节提到的红色LED灯,并通过串口打印Red Led On。

  • 实验准备

????????1)、带UART和发光二极管(LED)的K210开发板一块,用于实践并查看实验现象;

????????2)、官方裸机编程指导手册:kendryte_standalone_programming_guide,用于查阅SDK中接口说明。

  • 实验原理

????????串口通信是指外设和计算机间,通过数据线、地线和控制线等,按位进行数据传输的一种通信方式,传输方式为一个字符一个字符的传输,每个字符一位一位的传输,先传输低位,再传输高位,并且传输每个字符时,总是以起始位开始,以停止位结束,位于位之间可根据自己需求,设置时间间隔,这个时间间隔对应波特率;而对于有些场景,为了保证数据的可靠性,还需加上校验位,称之为奇偶校验位,以此来校验传输数据的正确性。如果两台设备之间需要通过串口进行通信,上面提到的波特率、数据位、停止位和奇偶校验位等这些必要参数,必须设置一致,才能进行串口通信。另外,串口通信支持全双工通信,即:使用一根数据线发送数据的同时,可以用另一个数据线进行数据接收。

  • 硬件设计

????????硬件电路图如下:

  • 软件设计

????????软件流程图如下:

  • 软件实现

????????根据硬件设计和软件设计可知,本节应用实现步骤如下:

????????1)、设置引脚复用功能:由硬件原理图可知:我们需要将IO12设置为GPIOHS功能,IO4和IO5设置为UART的RX和TX功能,如下图:

????????2)、LED初始化,如下图:

????????3)、UART初始化,如下图:

????????4)、通过UART发送提示信息:

????????5)、通过UART接收控制命令,并执行相应功能,发送提示信息

????????根据上述实现步骤,最终代码如下:

#include <fpioa.h>
#include <gpiohs.h>
#include <uart.h>

#define LED_R_PIN   (12)
#define LED_R_GPIOHSNUM (0)
#define LED_R_FUNC (FUNC_GPIOHS0+LED_R_GPIOHSNUM)

#define UART3_RX_PIN (4)
#define UART3_TX_PIN (5)
#define UART3_NUM (UART_DEVICE_3)
#define UART3_RX_FUNC (FUNC_UART1_RX+UART3_NUM*2)
#define UART3_TX_FUNC (FUNC_UART1_TX+UART3_NUM*2)

/*********************************
 * 管脚功能初始化
 ********************************/
void init_hardware(void)
{
    // 将红色LED管脚设置复用为GPIOHS
    fpioa_set_function(LED_R_PIN, LED_R_FUNC);
    // 将UART管脚设置复用为UART
    fpioa_set_function(UART3_RX_PIN, UART3_RX_FUNC);
    fpioa_set_function(UART3_TX_PIN, UART3_TX_FUNC);
}
/*********************************
 * LED初始化
 ********************************/
void init_led(gpio_pin_value_t value)
{
    // 设置输出
    gpiohs_set_drive_mode(LED_R_GPIOHSNUM, GPIO_DM_OUTPUT);
    // 设置初始电平状态
    gpiohs_set_pin(LED_R_GPIOHSNUM, value);
}
/*********************************
 * 控制LED亮灭
 ********************************/
void ctl_led(gpio_pin_value_t value)
{
    gpiohs_set_pin(LED_R_GPIOHSNUM, value);
}
/*********************************
 * UART初始化
 ********************************/
void init_uart(void)
{
    uart_init(UART3_NUM);
    uart_config (UART3_NUM , 115200 , UART_BITWIDTH_8BIT , UART_STOP_1 , UART_PARITY_NONE);
}

int main(int argc, char **argv)
{
    init_hardware();
    init_led(GPIO_PV_HIGH);
    init_uart();
    unsigned int recv_ret_len = 0;
    char recv_buf = 0;
    size_t recv_buf_len = 1;
    uart_send_data(UART3_NUM, "CTL LED:[0:OFF/1:ON] \r\n", sizeof("CTL LED:[0:OFF/1:ON] \r\n"));
    while (1)
    {
        recv_ret_len = uart_receive_data(UART3_NUM, &recv_buf, recv_buf_len);
        if(recv_ret_len)
        {
            if(recv_buf == 0)
            {
                uart_send_data(UART3_NUM, "LER_R OFF! \r\n", sizeof("LER_R OFF! \r\n"));
                ctl_led(GPIO_PV_HIGH);
            }
            else
            {
                uart_send_data(UART3_NUM, "LER_R ON! \r\n", sizeof("LER_R ON! \r\n"));
                ctl_led(GPIO_PV_LOW);
            }
            uart_send_data(UART3_NUM, "CTL LED:[0:OFF/1:ON] \r\n", sizeof("CTL LED:[0:OFF/1:ON] \r\n"));
        }
    }
    return 0;
}
  • 编译

????????1)、同上一节类似,在SDK中创建uart_find文件夹,在新建的文件夹中创建一个main.c文件,然后将本节代码输入到main.c文件中,如下图:

????????2)、同上一节的编译方式类似,打开vscode终端,在终端中进入上一节创建的build文件夹,然后输入:cmake ../ -DPROJ=uart_find -G "MinGW Makefiles" ,生成makefile文件,如下图:

????????3)、生成makefile文件后,输入:make ,开始编译,如下图:

????????4)、编译完成后,会在build目录下生成烧录文件:uart_find.bin,如下图:

  • 烧录

????????同上一节的烧录方式类似,注意:Firmware那一项选择我们刚编译出的uart_find.bin文件。

  • 实验现象

????????通过串口助手,发送0x00,红色LED灯熄灭,发送其他非零数,红色LED亮起。如下图:

????????1)、开启LED

????????2)、关闭LED

  • 实验总结

????????1)、如果想要在电脑端通过串口与开发板进行通信,需要将开发板的串口通信线接入串口芯片,如:CH340、CP2104等,经转换后才能与电脑通过串口助手显示和发送信息;

????????2)、串口助手工具上的串口设置需要和开发板设置的串口参数一致,否则不能正常通信;

????????3)、K210有三个UART外设,用户可根据实际情况决定使用多个UART。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-11-14 21:52:49  更:2021-11-14 21:53:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:34:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码