硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3828|回复: 3
收起左侧

[客户分享] HAL库串口中断收发实现

[复制链接]

2

主题

6

回帖

12

积分

新手上路

积分
12
发表于 2019-8-13 16:42:49 | 显示全部楼层 |阅读模式
  实现的串口中断收发,采用cube生成的HAL库实现,简单测试没问题。请各位坛友提提意见。

ZE_HAL_UART.zip

21.44 MB, 下载次数: 936

HAL_UART

评分

参与人数 1金币 +50 收起 理由
eric2013 + 50 赞一个!

查看全部评分

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2019-8-15 01:19:56 | 显示全部楼层
非常感谢楼主分享
回复

使用道具 举报

356

主题

2180

回帖

3253

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3253
发表于 2019-8-15 09:10:51 | 显示全部楼层
文件太大,能否简单贴出主要回调函数和相关说明?
回复

使用道具 举报

2

主题

6

回帖

12

积分

新手上路

积分
12
 楼主| 发表于 2019-8-17 14:55:39 | 显示全部楼层
caicaptain2 发表于 2019-8-15 09:10
文件太大,能否简单贴出主要回调函数和相关说明?

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if(huart->Instance == huart1.Instance)
    {
        UART1_Buf.head_wr = (huart1.RxXferSize - huart1.RxXferCount);
        HAL_UART_Receive_IT(huart,UART1_Buf.buf,512);
        
    }
}
主要利用串口中断接收函数HAL_UART_Receive_IT(&huart1,UART1_Buf.buf,512);接收512byte数据再回调。
因为HAL库内串口自带软件Buffer,count这些。自己另外新建一个串口的结构体,通过回调函数把结构体相关接口与HAL库自带的Buffer参数同步。这样就能实时的通过自己建立的新的接口读取Buffer内部的数据而不用等512byte接收完成

uint8_t UART_ReadC(UART_HandleTypeDef *huart,uint8_t *_Byte)
{
   
    if(huart->Instance == huart1.Instance)
    {
        
        DISABLE_INT();
        UART1_Buf.head_wr = (huart1.RxXferSize - huart1.RxXferCount);
        
        ENABLE_INT();
        if(UART1_Buf.head_wr == UART1_Buf.tail_rd)
        {
            return 0;
        }
        
        *_Byte = UART1_Buf.buf[UART1_Buf.tail_rd++];
        if(UART1_Buf.tail_rd >= UART_BUF_SIZE)
        {
            UART1_Buf.tail_rd = 0;
        }
        return 1;
    }
    return 0;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-17 05:46 , Processed in 0.041572 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表