基于hal库stm32f407串口通讯,采用dma能实现不定长的数据收发
2020-10-29 12:49:12 6.43MB stm32f407
1
在使用串口时,使用dma接收会提高程序的运行效率,所以我写一个串口dma接收程序,使用hal的cubemx配置,实现功能
2020-10-28 17:49:04 6.97MB HAL USART DMA
1
测试时可用的,里面也有一些测试读写的时间,读1K大概需要200us读4K能进1ms以内速度算还行吧,开了DMA,有需要的可以看看,挺多地方可以继续优化,同时可以简单修改,其他W25Qxx系列的芯片也是可用的.
2020-04-23 14:30:58 3.74MB STM3 W25Q256 SPI DMA
1
STM32F103ZET6,ADC1采集,通过定时器3触发中断,在中断程序里J将采集数据进行快速傅里叶变换,得到频率,幅值,实部,虚部并将处理的数据传送到串口进行打印
2020-04-11 03:10:29 4.54MB DMA STM32F103 FFT TIM3
1
STM32F103驱动SSD1353OLED程序,使用硬件SPI+DMA,帧率50Hz左右
2020-04-10 11:34:47 664KB SSD1353 OLED驱动 硬件SPI DMA
1
工程是基于STM32F207的ADC_DMA的整体程序 #define ADC1_DR_Address ((u32)0x4001204C) //ADC1数据寄存器地址=ADC1基准地址(0x40012000)+数据寄存器偏移地址(0x4c) GPIO_InitTypeDef GPIO_InitStructure; ADC_InitTypeDef ADC_InitStructure; ADC_CommonInitTypeDef ADC_CommonInitStructure; DMA_InitTypeDef DMA_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);// 使能 GPIO 时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 , ENABLE);// 开启ADC时钟 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE); // 开启DMA时钟 DMA_DeInit(DMA2_Stream0); DMA_InitStructure.DMA_Channel=DMA_Channel_0; DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;// 外设基址为:ADC 数据寄存器地址 DMA_InitStructure.DMA_Memory0BaseAddr = (u32)&ad;_start;// 存储器地址,实际上就是一个内部SRAM的变量 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;// 数据传输方向为外设到存储器 DMA_InitStructure.DMA_BufferSize = 1;// 缓冲区大小为,指一次传输的数据量 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; // 外设寄存器只有一个,地址不用递增 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;// 存储器地址 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;// 外设数据大小为半字,即两个字节 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; // 存储器数据大小也为半字,跟外设数据大小相同 DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; // 循环传输模式 DMA_InitStructure.DMA_Priority = DMA_Priority_High;// DMA 传输通道优先级为高,当使用一个DMA通道时,优先级设置不影响 DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; // 禁止DMA FIFO ,使用直连模式 DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
2020-03-05 03:09:35 7.37MB STM32F207 ADC DMA
1
在STM32F103单片机上实现,串口2通过DMA接收数据数据,并将接收的数据通过串口1发送出去。
2020-03-04 03:08:29 569KB STM32 103 串口 DMA
1
stm32的DMA可以进行数据的传输,而不用内存的参与。stm32通过DMA向串口发送和就收数据,数据丢失少。
2020-03-04 03:08:15 529KB stm32 DMA USATR
1
STM32的USART通讯 STM32通讯实验实验目的: 理解嵌入式通讯的基本原理; 掌握STM32的USART通讯; 理解通讯协议的使用。
2020-03-04 03:06:03 17.08MB STM32
1
网上使用HAL串口时很多都没有实现不定长数据的接收,要么是限定数据长度,要么是加“0x0a 0x0d”来控制接收完成,找了很久都没有真正找到一个能用的,在很多通信中不可能是定义的,或是加上“0x0a 0x0d”来实现的,由于项目需要,自己阅读STM32 HAL的文档,写出了一个Demo程序,可以实现回显功能(就是通过给STM32发送不定长的数据,可以实现一模一样接收发送的数据),在STM32F429IGT6上验证过,跑了一天没有出现丢失数据的问题,使用DMA发送与接收方式,可以释放CPU部分运算资源,程序中的UART_RX_BUF_SIZE定义为128,就是一次最大接收为128,我在项目中通过改为2048也可以通过一次接收2k的数据,代码量很少,才200多行,很容易看懂,可以移植到不同系列的STM32上,希望这程序能帮助到曾经跟我一样到处找资源解决HAL库与标准库串口使用上不同而痛苦的朋友们
2020-02-22 03:16:36 1.37MB stm32
1