硬汉嵌入式论坛

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

[UART] STM32H743的HAL库对串口硬件FIFO支持不完善,或者不支持,库里面的处理比较简单

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2018-4-18 10:42:38 | 显示全部楼层 |阅读模式
HAL库对中断方式封装的太厉害,要添加自己的东西非常不方便,虽然有回调函数,但是都是固定的那几种状态。

1、代码中使能硬件FIFO

void bsp_InitUart(void)
{
        
        /*##-1- 配置串口外设 ######################################*/
        /* USART3工作在UART模式 */
        /* 配置如下:
          - 数据位 = 8 Bits
          - 停止位 = 1 bit
          - 奇偶校验位 = 无
          - 波特率 = 115200bsp
          - 硬件流控制 (RTS 和 CTS 信号) */
        UartHandle.Instance        = USART3;

        UartHandle.Init.BaudRate     = 115200;
        UartHandle.Init.WordLength   = UART_WORDLENGTH_8B;
        UartHandle.Init.StopBits     = UART_STOPBITS_1;
        UartHandle.Init.Parity       = UART_PARITY_NONE;
        UartHandle.Init.HwFlowCtl    = UART_HWCONTROL_NONE;
        UartHandle.Init.Mode         = UART_MODE_TX_RX;
        UartHandle.Init.OverSampling = UART_OVERSAMPLING_16;
        UartHandle.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
        UartHandle.Init.Prescaler = UART_PRESCALER_DIV1;
        UartHandle.Init.FIFOMode = UART_FIFOMODE_ENABLE;
        UartHandle.Init.TXFIFOThreshold = UART_TXFIFO_THRESHOLD_3_4;
        UartHandle.Init.RXFIFOThreshold = UART_RXFIFO_THRESHOLD_3_4;

        UartHandle.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;

        if(HAL_UART_DeInit(&UartHandle) != HAL_OK)
        {
                Error_Handler(__FILE__, __LINE__);
        }  

        if(HAL_UART_Init(&UartHandle) != HAL_OK)
        {
                Error_Handler(__FILE__, __LINE__);
        }
}

2、使用串口中断方式发送的话,在函数HAL_UART_Transmit_IT里面使能FIFO中断


    /* Enable the TX FIFO threshold interrupt (if FIFO mode is enabled) or
       Transmit Data Register Empty interrupt (if FIFO mode is Disabled).
    */
    if (READ_BIT(huart->Instance->CR1, USART_CR1_FIFOEN) != RESET)
    {
      SET_BIT(huart->Instance->CR3, USART_CR3_TXFTIE);
    }
    else
    {
      SET_BIT(huart->Instance->CR1, USART_CR1_TXEIE);
    }

接收函数 HAL_UART_Receive_IT里面的FIFO使能中断

    /* Enable the UART Parity Error interupt and RX FIFO Threshold interrupt
       (if FIFO mode is enabled) or Data Register Not Empty interrupt
       (if FIFO mode is disabled).
    */
    if (READ_BIT(huart->Instance->CR1, USART_CR1_FIFOEN) != RESET)
    {
      SET_BIT(huart->Instance->CR1, USART_CR1_PEIE);
      SET_BIT(huart->Instance->CR3, USART_CR3_RXFTIE);
    }
    else
    {
      SET_BIT(huart->Instance->CR1, USART_CR1_PEIE | USART_CR1_RXNEIE);
    }



3、进入中断函数里面,发现全程无处理函数,HAL_UART_IRQHandler,看来只能自己写了。



回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
 楼主| 发表于 2018-4-18 12:43:20 | 显示全部楼层
写个中断做测试,发现问题比较多,暂时不研究了。
回复

使用道具 举报

116

主题

800

回帖

1148

积分

至尊会员

积分
1148
QQ
发表于 2018-4-18 15:12:53 | 显示全部楼层
看过串口接收函数,里面写的内容太多了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
 楼主| 发表于 2018-4-18 15:15:25 | 显示全部楼层
jcx0324 发表于 2018-4-18 15:12
看过串口接收函数,里面写的内容太多了

是的,太臃肿了,不过还好都是一些寄存器判断,兼容性好了,就是灵活性差了。
回复

使用道具 举报

56

主题

905

回帖

1073

积分

至尊会员

积分
1073
发表于 2018-4-19 12:48:58 | 显示全部楼层
软件又要加班了。这个项目经理坑手下。手下坑自己。
回复

使用道具 举报

0

主题

50

回帖

50

积分

初级会员

积分
50
发表于 2018-6-21 14:15:08 | 显示全部楼层
硬汉哥,要用HAL库的话是不是得删除好多东西自己重新写啊。感觉略坑
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
 楼主| 发表于 2018-6-21 15:27:21 | 显示全部楼层
meirenai 发表于 2018-6-21 14:15
硬汉哥,要用HAL库的话是不是得删除好多东西自己重新写啊。感觉略坑

不用删除,添加就行。
回复

使用道具 举报

32

主题

262

回帖

363

积分

高级会员

积分
363
发表于 2018-6-22 09:09:37 | 显示全部楼层
HAL 确实太过于臃肿了,领导准备在L系列上使用,看了看确实麻烦
回复

使用道具 举报

32

主题

295

回帖

391

积分

高级会员

积分
391
发表于 2018-6-24 10:28:49 | 显示全部楼层
在水一方 发表于 2018-6-22 09:09
HAL 确实太过于臃肿了,领导准备在L系列上使用,看了看确实麻烦

L1xx、L0XX 上好像有标准库。
回复

使用道具 举报

0

主题

50

回帖

50

积分

初级会员

积分
50
发表于 2018-6-26 09:21:20 | 显示全部楼层
本帖最后由 meirenai 于 2018-6-26 09:22 编辑

你们用HAL使用 CUBE 生成还是直接自己撸代码啊?
回复

使用道具 举报

32

主题

262

回帖

363

积分

高级会员

积分
363
发表于 2018-6-26 22:28:35 | 显示全部楼层
meirenai 发表于 2018-6-26 09:21
你们用HAL使用 CUBE 生成还是直接自己撸代码啊?

生成,手动该
回复

使用道具 举报

32

主题

262

回帖

363

积分

高级会员

积分
363
发表于 2018-6-26 22:29:13 | 显示全部楼层
weiyuliang 发表于 2018-6-24 10:28
L1xx、L0XX 上好像有标准库。

领导让用,跟上st
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 17:01 , Processed in 0.248148 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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