|
看论坛里面有有基于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
|