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 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> Pandora loT使用UART3 -> 正文阅读

[嵌入式]Pandora loT使用UART3

Pandora loT使用uart3进行数据收发

1 引脚定义

潘多拉开发板预留了一些IO口供我们使用,其中便有PB10和PB11,其引脚功能查看数据手册如下:

image-20220306113405394

使用USB转TTL将开发板连上电脑,下载口uart1也要连接

2 新建工程

打开RT-Studio,新建基于芯片STM32L475VETx的工程,下载口选择SWD.

3 修改配置

  1. 修改applications->main.c

    #include <rtthread.h>
    #include <board.h>
    #include <rtdevice.h>
    
    #define DBG_TAG "main"
    #define DBG_LVL DBG_LOG
    #include <rtdbg.h>
    
    #define LED0_PIN  GET_PIN(E,8)
    
    int main(void)
    {
        int count = 1;
        rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);
         LOG_D("System Clock information");
         LOG_D("SYSCLK_Frequency = %d", HAL_RCC_GetSysClockFreq());
         LOG_D("HCLK_Frequency   = %d", HAL_RCC_GetHCLKFreq());
         LOG_D("PCLK1_Frequency  = %d", HAL_RCC_GetPCLK1Freq());
         LOG_D("PCLK2_Frequency  = %d", HAL_RCC_GetPCLK2Freq());
        while (count++)
        {
            rt_pin_write(LED0_PIN, count % 2);
    //        LOG_D("Hello RT-Thread!");
            rt_thread_mdelay(1000);
        }
    
        return RT_EOK;
    }
    

    这一步修改完之后,保存编译下载,可以看到绿灯闪烁

  2. 打开drivers->board.h,在其中添加uart3的引脚配置,并使能usat3,如下:

    #define BSP_USING_UART3
    #define BSP_UART3_TX_PIN       "PB10"
    #define BSP_UART3_RX_PIN       "PB11"
    

    修改时钟为外部时钟源

/*----- CLOCK CONFIG BEGIN --------*/

#define BSP_CLOCK_SOURCE           ("HSE")
#define BSP_CLOCK_SOURCE_FREQ_MHZ  ((int32_t)8)
#define BSP_CLOCK_SYSTEM_FREQ_MHZ  ((int32_t)80)

这一步修改完之后,保存编译下载程序,在finsh中输入list_device,可以看到以及添加了uart3设备

  1. 添加applications->myuart3.c,代码如下:
/*
 * Copyright (c) 2006-2021, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2022-03-06     F_188       the first version
 */

#include <rtthread.h>

#define UART3_NAME    "uart3" /* 定义串口名称 */
#define RX_DATA_LEN   11      /* 定义接收数据长度 */

static rt_device_t ser;
static struct rt_semaphore rx_sem;
static char rx_data[RX_DATA_LEN];

/* 串口接收中断 */
static rt_err_t  uart3_rx(rt_device_t dev, rt_size_t size)
{
    rt_sem_release(&rx_sem);
    return RT_EOK;
}

/* 串口线程入口 */
static void ser3_tid_entry(void *p)
{
    rt_uint8_t i = 0, j;
    char ch;
    rt_uint8_t START_RX_FLAG = 0;

    while(1)
    {
        while(rt_device_read(ser, -1, &ch, 1) != 1) /* 每接收一个字符则循环一次 */
        {
            rt_sem_take(&rx_sem, RT_WAITING_FOREVER); /* 等待获取信号量 */

            if(i < RX_DATA_LEN)
            {
                if(ch == '$' || START_RX_FLAG)        /* 自定义数据头为"$" */
                {
                    START_RX_FLAG = 1;
                    rx_data[i++] = ch;
                }

                if(i == RX_DATA_LEN - 1)              /* 打印输出 */
                {
                    i = 0;
                    START_RX_FLAG = 0;
                    for(j = 0; j < RX_DATA_LEN; j++)
                    {
                        rt_kprintf("%c", rx_data[j]);
                    }
                    rt_kprintf("\n");
                }
            }
        }
    }
}

static int uart3_init(void)
{
    rt_err_t ret = RT_EOK;

    // 初始化串口3
    ser = rt_device_find(UART3_NAME);   /* 寻找设备 */
    if(!ser)
    {
        rt_kprintf("find %s failed\n", UART3_NAME);
        return -RT_ERROR;
    }

    ret = rt_device_open(ser, RT_DEVICE_FLAG_INT_RX); /* 打开设备 */
    if(ret != RT_EOK)
    {
        rt_kprintf("open %s device failed!\n", UART3_NAME);
        return -RT_ERROR;
    }

    rt_device_set_rx_indicate(ser, uart3_rx);  /* 设置串口接收中断 */

    // 初始化线程和信号量
    rt_sem_init(&rx_sem, "rx_sem", 0, RT_IPC_FLAG_FIFO);

    rt_thread_t tid = rt_thread_create("ser3", ser3_tid_entry, RT_NULL, 1024, 25, 10);
    if(tid != RT_NULL)
    {
        rt_thread_startup(tid);
    }
    else
    {
        rt_kprintf("uart3 thread init failed!\n");
        ret = -RT_ERROR;
    }

    rt_kprintf("uart3 init success\n");
    return ret;
}
INIT_APP_EXPORT(uart3_init);

? 保存编译下载,在uart3的串口终端中输入$1234567890,在finsh中可以看到输出image-20220306160228245

4 参考

  1. RT-Thread Studio快速上手
  2. UART设备
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:42:39  更:2022-03-08 22:43:33 
 
开发: 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:25:52-

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