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 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> Art pi 添加 UART5 -> 正文阅读

[嵌入式]Art pi 添加 UART5

在Art Pi 的工业拓展板上RS485 接口使用的是UART5 ,需要手工添加,具体的方法如下:

使用STM32CubeMX 工具打开UART5

点击 board->CubeMX_Config 下的CubeMX_Config.ioc 会自动启动STM32CubeMX 运行,配置好后,点击GENERATE Code。

注意: 在art Pi 开发板上

UART5_tx 为PB13

UART5_rx 为PB12?

与STM32CubeMX 默认不符,记得改过来。

另外,要记得开中断!

然后手动删除?board->CubeMX_Config->Core->Src 目录下的一些文件,仅保留 stm32h7xx_hal_msp.c 文件(RT-Thread 只使用该文件)。

修改libraries 目录下的Kconfig 文件

其中添加UART5

 menuconfig BSP_USING_UART
        bool "Enable UART"
        default n
        select RT_USING_SERIAL
        if BSP_USING_UART
            config BSP_USING_UART1
                bool "Enable UART1"
                default n
            config BSP_USING_UART3
                bool "Enable UART3"
                default n
            config BSP_USING_UART4
                bool "Enable UART4"
                default n
            config BSP_USING_UART5
                bool "Enable UART5"
                default n
            config BSP_USING_UART6
                bool "Enable UART6"
                default n
        endif

只有这样在RT-Thread 配置时 硬件中才能选择UART5

?

?修改board.h

? ? ?添加UART5 的引脚定义

#ifdef BSP_USING_UART4
#define BSP_UART4_TX_PIN       "PA0"
#define BSP_UART4_RX_PIN       "PI9"
#endif
#ifdef BSP_USING_UART5
#define BSP_UART5_TX_PIN       "PB13"
#define BSP_UART5_RX_PIN       "PB12"
#endif
#ifdef BSP_USING_UART6
#define BSP_UART6_TX_PIN       "PC6"
#define BSP_UART6_RX_PIN       "PC7"
#endif

? ? ? 编译会出错找不到 Error_Handler();? ?把它括掉就可以了。? ? ?

?UART 中断方式收发程序

接收字符的过程

1 定义 一个串口serial

2 定义一个中断回调函数

3 判断uart5 是否在程序中存在

4 配置速率

5 打开

6 接收到字符时产生中断,进入回调函数rx_ok_flg =true

7 结收字符到缓存区。

uint8_t rk_ok_flag = 0;
static rt_device_t serial;
#define SAMPLE_UART_NAME       "uart5"
struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT; 

static rt_err_t uart_recv_callback(rt_device_t dev, rt_size_t size)
{
    rk_ok_flag = 1;
    return RT_EOK;
}

int main(void)
{
    char ch;
    int i = 0;
    static int count = 1;
    char buf[25] = { 0 };
    serial = rt_device_find(SAMPLE_UART_NAME);
    if (!serial)
    {
        rt_kprintf("find %s failed!\n", SAMPLE_UART_NAME);
        return RT_ERROR;
    }
    config.baud_rate = BAUD_RATE_115200;      
    if(RT_EOK != rt_device_control(serial, RT_DEVICE_CTRL_CONFIG, &config))
    {
        rt_kprintf("fail\n");
        return RT_ERROR;
    }

    if(RT_EOK != rt_device_open(serial, RT_DEVICE_FLAG_INT_RX))
    {
        rt_kprintf("fail\n");
        return RT_ERROR;
    }

    rt_device_set_rx_indicate(serial, uart_recv_callback);
//main loop
    while (1)
    {
        if (1 == rk_ok_flag && 0 == rt_device_read(serial, -1, &ch, 1))
        {
            rk_ok_flag = 0;
            buf[i++] = ch;
            if (buf[i - 2] == '\r' && buf[i - 1] == '\n')
            {
                i = 0;
                count++;        
                rt_kprintf("Data:%s\n", buf);
                memset(buf, 0, 25);
            }
        }
    }
    return RT_EOK;
}

中断发送字符的过程

以中断收发方式打开串口

 rt_device_open(serial, RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_INT_TX);

设置tx 回调函数

rt_device_set_tx_complete(serial, serial_tx_ind);

又有人说使用DMA发送模式才会调用这个回调函数?。 OS 内部是通过中断发送一串数据的么?

下面是别人写的代码

static rt_err_t uart_intput(rt_device_t dev, rt_size_t size)
{    
    return RT_EOK;
}

static rt_device_t uart_device = RT_NULL;
static char* str ="lissettecarlr";
int main(void)
{
      uart_device=rt_device_find("uart2");
      rt_device_set_rx_indicate(uart_device, uart_intput);
      rt_device_open(uart_device, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX );  
      rt_device_write(uart_device, 0, str, strlen(str));
    return 0;
}

这些内容仅为笔记,没有实际调试

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-10-12 23:37:07  更:2021-10-12 23:38:03 
 
开发: 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 5:36:15-

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