## 实现功能 * 收/发环形缓冲区 * 不定长度接收处理 * 高速(1.5Mbps)通信不丢数据
## 关键实现 ### DMA发送模式 * 线程循环查询发送环形缓冲区数据,然后启动MDA传输 * DMA传输完成中断,连续发送 * 定时器中断周期发送
### DMA接收模式 * DMA缓存半满中断(如CPU硬件支持,可使用DMA双缓存机制) * DMA缓存传输完成中断 * 串口空闲中断实现 ### DMA接收模式 * DMA缓存半满中断(如CPU硬件支持,可使用DMA双缓存机制) * DMA缓存传输完成中断 * 串口空闲中断实现 ### DMA接收模式 * DMA缓存半满中断(如CPU硬件支持,可使用DMA双缓存机制) * DMA缓存传输完成中断 * 串口空闲中断实现 ### DMA接收模式 * DMA缓存半满中断(如CPU硬件支持,可使用DMA双缓存机制) * DMA缓存传输完成中断 * 串口空闲中断实现 ### DMA接收模式 * DMA缓存半满中断(如CPU硬件支持,可使用DMA双缓存机制) * DMA缓存传输完成中断 * 串口空闲
2024-04-24 18:22:44 375KB stm32 USART DMA
1
stm32f105用DMA方式实现串口收发,真正意义上的效率至上
2024-03-23 04:21:31 6.42MB 串口-DMA
1
采用STM32F429IGT6单片机,KeilMDK5.32版本 使用SysTick系统滴答定时器进行延时 LED_R、LED_G、LED_B分别为PH10,PH11,PH12 Key1为PA0,Key2为PC13 KEIL5下载配置有FLASH与SRAM 用SPI5与Flash芯片通信(W25Q256JV),使用了DMA进行收发数据,SPI是同步通信,同时收发数据(其实仅与发TX同步,作为主器件,Tx产生波特率时钟SCK信号) 利用可变参数宏实现printf与scanf 定义了Flash输入输出结构体,利用了共用体 发送与接收缓冲区大小均为一个扇区大小4096B NSS(CS)采用软件控制,因为Flash芯片每发送玩一个指令都要把CS拉高。 注意点:因为TX产生SCK时钟,故需要TX的DMA优先级要比RX的优先级低,本次TX和RX的DMA使用的是一个DMA(DMA2),因为当收发一个数据后,TX和RX的DMA出现仲裁,TX需要发下一个数据,RX需要接收当前数据,为了防止一直发数据,故RX的DMA优先级需要比TX的高开启RX的DMA传输完成中断,在该中断中将CS拉高,结束通讯。
2022-12-23 09:59:58 616KB stm32 c语言
1
采用STM32F429IGT6单片机,KeilMDK5.32版本 使用SysTick系统滴答定时器进行延时 LED_R、LED_G、LED_B分别为PH10,PH11,PH12 Key1为PA0,Key2为PC13 KEIL5下载配置有FLASH与SRAM 收发共用一个缓冲区 I2C使用DMA与AT24C02通信,Tx中,利用DMA传输数据,但是起始位,设备地址,读写地址采用的是阻塞式发送,数据则是采用DMA传输;注意点:采用DMA发送应该等到BTF(发送寄存器空,移位寄存器也为空)事件后设置停止位,不可以在DMA传输完成中断中设置停止位,因为此时正在发送最后一个字节,故开启BTF中断(I2C_EV),在该中断服务函数中发送停止位并关闭I2C的DMA传输使能。 Rx中,利用DMA传输数据,但是起始位,设备地址,AT24C02写入地址采用的是阻塞式发送,数据则是采用DMA传输;注意点:在DMA传输完成中断中发送停止位,并关闭I2C的DMA传输使能,I2C主接收,写读转换中再次发送起始位前,第一次发送设备地址字节后,应检测BTF 仿printf写入发送缓冲区前,应检查上一次通信是否结束
2022-12-06 22:29:30 619KB stm32 c语言
1
采用STM32F429IGT6单片机,KeilMDK5.32版本 使用SysTick系统滴答定时器进行延时 LED_R、LED_G、LED_B分别位PH10,PH11,PH12 USART1,波特率115200,无校验位,1位停止位 PA9->TX,PA10->RX,开启TC和IDLE中断 仿printf发送,DMA式收发数据 串口空闲中断触发后,在中断服务函数中重新填写DMA的剩余传输数据数量寄存器的值,保证下一次接收数据是从串口接收缓冲区的第一个字节接收 配备了CRC校验,使用CRC-32(以太网)多项式:0x4C11DB7 KEIL5下载配置有FLASH与SRAM
2022-10-07 16:28:10 598KB stm32 c语言
1
使用microphase zynq开发板的vivado 2018.03工程,linux下的dma收发
2022-08-08 10:22:04 33.84MB zynq dma linux
1
基于stm32f407的串口环形队列及DMA收发中断数据处理,连接了串口1的收发DMA通道,组合环形队列实现数据的缓存处理,亲测有效,可能存在变量类型不一致的问题,重新定义一下即可,欢迎交流。
2022-05-10 21:36:40 5KB stm32 缓存 arm 嵌入式硬件
1
stm32f0 i2c 实例 dma demo读取外部flash,亲测可用 金典实例。
2022-03-28 15:37:00 1.12MB stm32f10 i2c 实例 dma
1
STM32F103串口DMA收发,参考例程改写,详细注释,试验成功。初学者很好的参考模板。
2022-02-18 01:08:07 6.02MB STM32F103 串口DMA收发
1
实现STM32F103ZET6串口通过使用STM32的IDLE空闲中断(USAR_TFLAG_IDLE)实现UART1_DMA接收和发送(Rx和Tx均通过DMA通道)不定长数据。
2021-12-24 14:03:20 5.53MB uart dma UARTDMA 串口通信
1