AI嵌入式K210项目(5)-串口通讯

这篇具有很好参考价值的文章主要介绍了AI嵌入式K210项目(5)-串口通讯。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

串口通讯是平时大家进行调试最常用的方法,嵌入式应用通常要求一个简单的并且占用系统资源少的方法来传输数据。通用异步收发传输器 (UART)即可以满足这些要求,它能够灵活地与外部设备进行全双工数据交换,那么本章我们来了解下,本节课主要学习K210的串口通讯。


一、什么是UART?

串口通讯是指外设和计算机间,通过数据信号线、地线等,按位(bit)进行传输数据(发送和接收)的一种通讯方式,一个字符一个字符地传输,每个字符一位一位地传输,并且传输一个字符时,总是以“起始位”开始,以“停止位”结束,字符之间没有固定的时间间隔要求,但是数据是低位在前,高位在后,然后接上奇偶检验位。

AI嵌入式K210项目(5)-串口通讯,K210开发板,AI嵌入式,K210,AI,嵌入式,嵌入式硬件
串口支持全双工通讯,也就是使用一根线发送数据的同时,用另一根线接收数据。串口通讯最重要的参数是波特率、数据位、停止位和奇偶校验,对于两个通讯的端口,这些参数是必须设置为相同的。
也可以参考我的这篇文章STM32开发(7)----CubeMX配置串口通讯(轮询方式)

二、K210的UART

Tpye-C接口连接到串口芯片,具有供电和串口传输数据的功能,下载程序也是通过串口传输数据的功能把固件传输到K210芯片上的。

Type-C接口是目前主流的数据传输连接接口,市面上很多智能手机也是使用Type-C接口给手机充电和传输数据。Type-C接口是可以正反插的,不用担心反向拿反而插不进的问题。

通用UART 为UART1、UART2 和UART3,支持异步通信(RS232 和RS485 和IRDA,通信速率可达到5Mbps。UART 支持CTS 和RTS 信号的硬件管理以及软件流控(XON 和XOFF)。3 个接口均可被DMA 访问或者CPU 直接访问。每次传输数据为8字节,支持异步时钟,可单独配置数据时钟,实现全双工模式,保证两个时钟域中数据同步。

uart默认为RS232模式,也可以配置为软件可编程式RS485模式。
K210 Tpye-C接口连接K210的IO4和IO5接口,其中IO4为K210芯片的接收引脚,IO5为K210芯片的发送引脚。
AI嵌入式K210项目(5)-串口通讯,K210开发板,AI嵌入式,K210,AI,嵌入式,嵌入式硬件
对应的头文件 uart.h
为用户提供以下接口
• uart_init
• uart_config (0.6.0 后不再支持,请使用 uart_configure)
• uart_configure
• uart_send_data
• uart_send_data_dma
• uart_send_data_dma_irq
• uart_receive_data
• uart_receive_data_dma第 11 章 通用异步收发传输器 (UART) 125
• uart_receive_data_dma_irq
• uart_receive_data_dma_irq
• uart_irq_register
• uart_irq_deregister
• uart_set_work_mode
• uart_set_rede_polarity
• uart_set_rede_enable
• uart_set_tat
• uart_set_det
• uart_debug_init
• uart_handle_data_dma

三、实验过程

新建一个uart的文件夹,在里面新建main.c,以后也都是这样,我们每一个实验放一个文件夹
AI嵌入式K210项目(5)-串口通讯,K210开发板,AI嵌入式,K210,AI,嵌入式,嵌入式硬件

#include "fpioa.h"
#include "uart.h"
#include <string.h>
// 硬件IO口,与原理图对应
#define PIN_UART_USB_RX       (4)
#define PIN_UART_USB_TX       (5)

/*****************************SOFTWARE-GPIO********************************/
// 软件GPIO口,与程序对应
#define UART_USB_NUM           UART_DEVICE_3

/*****************************FUNC-GPIO************************************/
// GPIO口的功能,绑定到硬件IO口
#define FUNC_UART_USB_RX       (FUNC_UART1_RX + UART_USB_NUM * 2)
#define FUNC_UART_USB_TX       (FUNC_UART1_TX + UART_USB_NUM * 2)


/**
* Function       hardware_init
* @brief         硬件初始化,绑定GPIO口
* @param[in]     void
* @param[out]    void
* @retval        void
* @par History   无
*/
void hardware_init(void)
{
    // fpioa映射
    fpioa_set_function(PIN_UART_USB_RX, FUNC_UART_USB_RX);
    fpioa_set_function(PIN_UART_USB_TX, FUNC_UART_USB_TX);
}

/**
* Function       main
* @brief         主函数,程序的入口
* @param[in]     void
* @param[out]    void
* @retval        0
* @par History   无
*/
int main(void)
{
    hardware_init();
    // 初始化串口3,设置波特率为115200
    uart_init(UART_USB_NUM);
    uart_configure(UART_USB_NUM, 115200, UART_BITWIDTH_8BIT, UART_STOP_1, UART_PARITY_NONE);

    /* 开机发送hello yahboom! */
    char *hello = {"hello world!\n"};
    uart_send_data(UART_USB_NUM, hello, strlen(hello));

    char recv = 0;

    while (1)
    {
        /* 等待串口信息,并通过串口发送出去 */
        while(uart_receive_data(UART_USB_NUM, &recv, 1))
        {
            uart_send_data(UART_USB_NUM, &recv, 1);
        }
    }
    return 0;
}

代码写好后,我们开始编译,注意:如果你编译过程中出现错误,可以先make clean掉之前生成的过程文件,重新生成

cd build
//注意这里的目标文件目录改成uart,和刚才新建的文件夹名称一致
cmake .. -DPROJ=uart  -G "MinGW Makefiles"
make

烧录
AI嵌入式K210项目(5)-串口通讯,K210开发板,AI嵌入式,K210,AI,嵌入式,嵌入式硬件
然后来看看结果吧
AI嵌入式K210项目(5)-串口通讯,K210开发板,AI嵌入式,K210,AI,嵌入式,嵌入式硬件
那么还有其他方式进行串口输出调试吗?我们习惯用printf进行调试;这个系统初始化时候已经帮我们做好了一起来看看user_entry.c文件
系统在初始化bsp是有已经注册系统输出回调函数,printf 时会调用该函数。系统默认使用 UART3,如果需要修改 UART 则调用
uartdebuginit 函数,具体请到 uart 章节查看该函数;

void _init_bsp(int core_id, int number_of_cores)
{
    extern int main(int argc, char* argv[]);
    extern void __libc_init_array(void);
    extern void __libc_fini_array(void);

    if (core_id == 0)
    {
        /* Initialize bss data to 0 */
        init_bss();
        /* Init UART */
        fpioa_set_function(4, FUNC_UART3_RX);
        fpioa_set_function(5, FUNC_UART3_TX);
        uart_debug_init(UART_DEVICE_3);
        /* Init FPIOA */
        fpioa_init();
        /* Register finalization function */
        atexit(__libc_fini_array);
        /* Init libc array for C++ */
        __libc_init_array();
        /* Get reset status */
        sysctl_get_reset_status();
        /* Init plic */
        plic_init();
        /* Enable global interrupt */
        sysctl_enable_irq();
    }

因此我们直接使用printf之类的函数也是可以的,写个简单的示例如下:
这里注意包含头文件

#include <bsp.h>
#include <sysctl.h>

int main(void)
{
    int data;
    printf("Hello world\n");
    /* Clear stdin buffer before scanf */
    sys_stdin_flush();
    scanf("%d", &data);
    printf("\nData is %d\n", data);
    while(1)
        continue;
    return 0;
}

代码编译

cd build
//注意这里的目标文件目录改成uart,和刚才新建的文件夹名称一致
cmake .. -DPROJ=printf  -G "MinGW Makefiles"
make

烧录
AI嵌入式K210项目(5)-串口通讯,K210开发板,AI嵌入式,K210,AI,嵌入式,嵌入式硬件
这个方式是不是更简单?以后我们就直接用printf进行打印了


总结

本章介绍了K210 串口通讯的相关知识
K210总共有三个,分别是UART1,UART2和UART3;uart默认使用RS232模式,可以另外配置成可编程式RS485模式;uart的引脚如果映射到其他硬件引脚上,需要连接其他串口芯片如CH340上才可以显示数据。

注册系统输出回调函数,printf 时会调用该函数。系统默认使用 UART3,如果需要修改 UART 则调用
uartdebuginit 函数,以后我们直接使用printf进行调试即可文章来源地址https://www.toymoban.com/news/detail-794198.html

到了这里,关于AI嵌入式K210项目(5)-串口通讯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AI嵌入式K210项目(19)-安装CanMV IDE开发软件

    前几章我们介绍K210使用C语言裸机开发方法,大家对K210内部的硬件和各种加速器有了初步的了解,但是开发人工智能相关程序,使用C语言的话复杂度比较高,因此接下来我们逐步学习基于K210芯片使用python开发人工智能相关程序,包含颜色识别,人脸识别,口罩识别等,也包

    2024年01月25日
    浏览(44)
  • 【嵌入式项目应用】__物联网小知识:不同通讯线的通讯距离是多少,你知道吗?

    目录 前言 不同协议通讯线的传输距离  无线传输协议与距离 1. 蓝牙 2. Zigbee 3. LoRa 4. Wi-Fi 5. 蜂窝网络 6. Sigfox 7. LoRaWAN (* ̄︶ ̄)创作不易!期待你们的 点赞、收藏和评论喔。  在物联网中,通讯线的作用是 传输数据 、 信号 和 电能 ,以便在设备之间建立通信链路。 常见的

    2024年02月05日
    浏览(41)
  • 嵌入式学习笔记(21)S5PV210的时钟域详解

    时钟域:MSYS、DSYS、PSYS 因S5PV210的时钟体系比较复杂,内部外设模块太多,因此把整个内部的时钟划分为3大块,叫做3个域。之所以分为3个域,是因为210内部的这些模块彼此工作时钟频率差异太大了,所以又必要把高速的放一起,相对低速的放在一起。 (1)MSYS:CPU(Cortex-

    2024年02月09日
    浏览(31)
  • 嵌入式学习笔记(32)S5PV210的向量中断控制器

    6.6.1异常处理的2个阶段 可以将异常处理分为2个阶段来理解。第一个阶段是异常向量表跳转;第二个阶段是进入了真正的异常处理程序irq_handler之后的部分。 6.6.2回顾:中断处理的第一个阶段(异常向量表跳转阶段)处理 (1)第一个阶段之所以能够进行,主要依赖于CPU设计时

    2024年02月07日
    浏览(44)
  • 嵌入式 STM32 通讯协议--MODBUS

    目录 一、自定义通信协议 1、协议介绍 2、网络协议 3、自定义的通信协议  二、MODBUS通信协议 1、概述 2、MODBUS帧结构  协议描述 3、MODBUS数据模型   4、MODBUS事务处理的定义 5、MODBUS功能码  6、功能码定义   7、MODBUS数据链路层 8、MODBUS地址规则  9、MODBUS帧描述 10、MODBUS两种

    2024年02月11日
    浏览(42)
  • 【嵌入式基础】串口通信操作实例

    本文主要介绍流水灯实验和串口通信的实验过程,对串口协议和RS-232标准,RS232电平与TTL电平的区别,以及\\\"USB/TTL转232\\\"模块(以CH340芯片模块为例)的工作原理这些知识也有了一定的涉及。 目录 一、了解串口协议以及\\\"USB/TTL转232\\\"模块的工作原理 1、串口协议 2、RS-232标准 3、

    2024年02月01日
    浏览(40)
  • 嵌入式Linux应用开发笔记:串口

    串口(UART)是嵌入式设备中比较常用的功能。这篇文章将记录下应用程序中串口操作相关内容。 这篇文章中内容均在下面的开发板上进行测试: 《新唐NUC980使用记录:自制开发板(基于NUC980DK61YC)》 这篇文章是在下面文章基础上进行的: 《新唐NUC980使用记录(5.10.y内核)

    2024年02月09日
    浏览(34)
  • STM32串口通信详解(嵌入式学习)

    时钟信号在电子领域中是指用于同步和定时电路操作的周期性信号。它在数字系统和通信系统中起着至关重要的作用,用于协调各个组件之间的数据传输和操作。 时钟信号有以下几个重要的方面: 频率:时钟信号的频率是指单位时间内信号周期的数量。它通常以赫兹(Hz)为

    2024年02月09日
    浏览(56)
  • python+嵌入式——串口通信篇(收发解包)

    这几年,自己也做了一些嵌入式机器人。在整个开发的过程中,调通信通常会花费一段比较长的时间,串口通信就是这样的一个部分。 而现在在百度上进行搜索,发现对python串口通信的博客讲解,都有点太笼统了,这其中,应该与python在处理硬件底层速度较慢导致用的人少有

    2024年02月07日
    浏览(36)
  • 【蓝桥杯嵌入式】蓝桥杯嵌入式第十二届省赛题,考点:模拟电压,串口通信,计时器

     🎊【蓝桥杯嵌入式】专题正在持续更新中,原理图解析✨,各模块分析✨以及历年真题讲解✨都在这儿哦,欢迎大家前往订阅本专题,获取更多详细信息哦🎏 🎏【蓝桥杯嵌入式】蓝桥杯第十届省赛真题 🎏【蓝桥杯嵌入式】蓝桥杯第十二届省赛程序真题 🎏【蓝桥杯嵌入式

    2023年04月09日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包