硬汉嵌入式论坛

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

[UART] V7板子,串口UART1驱动,可选DMA,INT,POOL三种模式驱动,可以选择单独开发或者收.

[复制链接]

4

主题

46

回帖

58

积分

初级会员

积分
58
发表于 2022-8-27 16:37:14 | 显示全部楼层 |阅读模式
看论坛里面有有基于CUBEMX的,我不太爱用,前段时间手写了一个
共享出来给大家参考,实现了一个基于循环队列的数据结构.
并且考虑了DMA缓存一致性的问题
[C] 纯文本查看 复制代码
//定义串口模式
#define MCU_UART1_TRANS_MODE                        UART_MODE_TX_RX
//定义串口发送方法
#define MCU_UART1_TX_FUNC_USER                      MCU_UART_TX_FUNC_DMA
//定义串口接收方法
#define MCU_UART1_RX_FUNC_USER                      MCU_UART_RX_FUNC_DMA
//发送方法定义,1为同步发送,发送必须等待完成 0为异步发送,写到缓冲区里面自动发送
#define UART1_TRANS_FUNC_SYNC                       0

//等待时间,9600下,单字节发送最长时间也不到2MS
#define MCU_UART1_SINGLE_BYTE_TRANS_TIME_MS_MAX     2
//串口传输指定长度数据的最长等待时间
#define MCU_UART1_WAIT_TRANS_MAX(bufferByteMax)     (MCU_UART1_SINGLE_BYTE_TRANS_TIME_MS_MAX*(bufferByteMax))

//错误配置报警,防止用户配错模式导致程序异常
#if(MCU_UART1_TRANS_MODE == UART_MODE_TX)&&(MCU_UART1_RX_FUNC_USER != MCU_UART_RX_FUNC_NONE)
//只定义了发送,但是却定义了接收模式,错误,接受模式应该是 MCU_UART_RX_FUNC_NONE
#error "MCU_Uart1 Only Define TX,Should Not Define RX USER Func"
#endif
#if(MCU_UART1_TRANS_MODE == UART_MODE_RX)&&(MCU_UART1_TX_FUNC_USER != MCU_UART_TX_FUNC_NONE)
//只定义了接收,但是却定义了发送模式,错误,发送模式应该是 MCU_UART_TX_FUNC_NONE
#error "MCU_Uart1 Only Define RX,Should Not Define TX USER Func"
#endif
#if(MCU_UART1_TRANS_MODE == UART_MODE_RX)&&(MCU_UART1_RX_FUNC_USER == MCU_UART_RX_FUNC_NONE)
//定义了接收,却没有定义接收方法
#error "MCU_Uart1 Define RX,Should Define RX USER Func"
#endif
#if(MCU_UART1_TRANS_MODE == UART_MODE_TX)&&(MCU_UART1_TX_FUNC_USER == MCU_UART_TX_FUNC_NONE)
//定义了接收,却没有定义接收方法
#error "MCU_Uart1 Define TX,Should Define TX USER Func"
#endif
#if(MCU_UART1_TRANS_MODE == UART_MODE_TX_RX)&&(MCU_UART1_RX_FUNC_USER == MCU_UART_RX_FUNC_NONE)
//定义了发送接收,却没有定义接收方法
#error "MCU_Uart1 Define TXRX,Should Define RX USER Func"
#endif
#if(MCU_UART1_TRANS_MODE == UART_MODE_TX_RX)&&(MCU_UART1_TX_FUNC_USER == MCU_UART_TX_FUNC_NONE)
//定义了发送接收,却没有定义接收方法
#error "MCU_Uart1 Define TXRX,Should Define TX USER Func"
#endif



//是否打开发送
#if((MCU_UART1_TRANS_MODE == UART_MODE_TX_RX)||(MCU_UART1_TRANS_MODE == UART_MODE_TX))
//TX引脚定义
#define UART1_PIN_TX                            MCU_PIN_A_9
//串口用于printf的缓冲区的长度
#define LENGTH_UART1_BUFFER_WITH_FORMAT         1024
//发送数据的串口缓冲区的长度
#define LENGTH_UART1_BUFFER_WITH_SEND           1024
//使用DMA单块发送数据,单块的长度
#define LENGTH_UART1_BUFFER_WITH_BLOCK          256
#endif

#if(MCU_UART1_TX_FUNC_USER == MCU_UART_TX_FUNC_DMA)
//发送DMA各项配置映射
#define MCU_UART1_DMA_TX_CLK_ENABLE()           __HAL_RCC_DMA1_CLK_ENABLE()
#define MCU_UART1_DMA_TX_INSTANCE               DMA1_Stream0
#define MCU_UART1_DMA_TX_PRIORITY               DMA_PRIORITY_MEDIUM
#define MCU_UART1_DMA_TX_IRQ                    DMA1_Stream0_IRQn
#define MCU_UART1_DMA_TX_IRQ_HANDLER            DMA1_Stream0_IRQHandler
#endif

//是否打开接收
#if((MCU_UART1_TRANS_MODE == UART_MODE_TX_RX)||(MCU_UART1_TRANS_MODE == UART_MODE_RX))
//RX引脚定义
#define UART1_PIN_RX                            MCU_PIN_A_10
//串口用于接收的BLOCK数量
#define COUNT_UART1_RECV_BLOCK                  16
//串口用于接收的BLOCK的每一个的长度
#define LENGTH_UART1_RECV_SINGLE_BLOCK          128
#endif

#if(MCU_UART1_RX_FUNC_USER == MCU_UART_RX_FUNC_DMA)
//接收DMA的各项配置
#define MCU_UART1_DMA_RX_CLK_ENABLE()        __HAL_RCC_DMA1_CLK_ENABLE()
#define MCU_UART1_DMA_RX_INSTANCE            DMA1_Stream1
#define MCU_UART1_DMA_RX_PRIORITY            DMA_PRIORITY_HIGH
#define MCU_UART1_DMA_RX_IRQ                 DMA1_Stream1_IRQn
#define MCU_UART1_DMA_RX_IRQ_HANDLER         DMA1_Stream1_IRQHandler
#endif

MCU_Uart1.c

33.11 KB, 下载次数: 13

MCU_Uart1.h

5.48 KB, 下载次数: 8

MCU_UartUniversal.c

7.07 KB, 下载次数: 8

MCU_UartUniversal.h

2.58 KB, 下载次数: 8

ADT_Base.h

998 Bytes, 下载次数: 8

ADT_CircularByteQueue.c

4.96 KB, 下载次数: 6

ADT_CircularByteQueue.h

2.26 KB, 下载次数: 8

ADT_Port.h

1.11 KB, 下载次数: 9

MPU_Config.c

15.31 KB, 下载次数: 8

MPU_Config.h

5.73 KB, 下载次数: 8

stm32h743xx_flash_full.icf

11.06 KB, 下载次数: 9

MCU_MPU.c

3.3 KB, 下载次数: 8

MCU_MPU.h

1.21 KB, 下载次数: 8

回复

使用道具 举报

44

主题

563

回帖

700

积分

金牌会员

积分
700
发表于 2022-8-27 19:53:48 | 显示全部楼层
可以单独做个一个串口demo工程上转
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106974
QQ
发表于 2022-8-28 17:04:27 | 显示全部楼层
谢谢分享。
回复

使用道具 举报

610

主题

3061

回帖

4911

积分

至尊会员

积分
4911
发表于 2022-9-14 14:15:33 | 显示全部楼层
看着貌似有点复杂 哟
回复

使用道具 举报

1

主题

26

回帖

29

积分

新手上路

积分
29
发表于 2022-9-14 17:52:05 | 显示全部楼层

谢谢分享 学习学习
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-12 12:57 , Processed in 0.166102 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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