好久没写博客了,最近挺忙的。近来有些好玩的实现,网上的资料并不是非常详细,打算慢慢写下来,希望别人能少走一点弯路。因为希望提高ADC的采样率,这次我试着实现了一下三重ADC交替采样+DMA搬运至内存+TIM的TRGO触发采样(环境是stm32cubemx6.5.0和keil5) 首先打开cubemx进行基础设置(设置时钟树,RCC,SYS)然后设置ADC1(下图为具体设置,仅供参考)此处我们将ADC_Mode设置为Tripleregularsimultaneousmodeonly,并打开DMA连续请求(为了使DMA能够填满数组,按照我们的预期工作)外部触发源设置为TIM2的TRGO由于已经设置
SPI是我最常用的接口之一,连接管脚仅为4根;在常见的芯片间通信方式中,速度远优于UART、I2C等其他接口。STM32的SPI口的同步时钟最快可到PCLK的二分之一,单个字节或字的通信时间都在us以下,因此大多数情况下我们会使用查询法控制SPI口的传输。但对于大量且连续的通信,再使用查询法就显得有些浪费CPU的时间,DMA控制SPI的读写显然成为一种不错的选择。为DMA控制SPI批量数据读写的功能,参照官方代码编写的DMA控制SPI口在主/从两种模式下,读写数据的的代码,供各位网友直接使用或批评指正。先直接上我得到结论:1、运用STM32的SPI口的DMA的功能,能够提升STM32与外设之间
SPI是我最常用的接口之一,连接管脚仅为4根;在常见的芯片间通信方式中,速度远优于UART、I2C等其他接口。STM32的SPI口的同步时钟最快可到PCLK的二分之一,单个字节或字的通信时间都在us以下,因此大多数情况下我们会使用查询法控制SPI口的传输。但对于大量且连续的通信,再使用查询法就显得有些浪费CPU的时间,DMA控制SPI的读写显然成为一种不错的选择。为DMA控制SPI批量数据读写的功能,参照官方代码编写的DMA控制SPI口在主/从两种模式下,读写数据的的代码,供各位网友直接使用或批评指正。先直接上我得到结论:1、运用STM32的SPI口的DMA的功能,能够提升STM32与外设之间
目录AIR32F103(一)合宙AIR32F103CBT6开发板上手报告AIR32F103(二)Linux环境和LibOpenCM3项目模板AIR32F103(三)Linux环境基于标准外设库的项目模板AIR32F103(四)27倍频216MHz,CoreMark跑分测试AIR32F103(五)FreeRTOSv202112核心库的集成和示例代码AIR32F103(六)ADC,I2S,DMA和ADPCM实现的录音播放功能关于使用AIR32的ADC,I2S和DMA实现简单的语音录音和播放功能,以及使用ADPCM编码提升录音时长.使用的MCU型号为AIR32F103CCT6.如果用CBT6,对应的
目录AIR32F103(一)合宙AIR32F103CBT6开发板上手报告AIR32F103(二)Linux环境和LibOpenCM3项目模板AIR32F103(三)Linux环境基于标准外设库的项目模板AIR32F103(四)27倍频216MHz,CoreMark跑分测试AIR32F103(五)FreeRTOSv202112核心库的集成和示例代码AIR32F103(六)ADC,I2S,DMA和ADPCM实现的录音播放功能关于使用AIR32的ADC,I2S和DMA实现简单的语音录音和播放功能,以及使用ADPCM编码提升录音时长.使用的MCU型号为AIR32F103CCT6.如果用CBT6,对应的
串口配置: 异步,波特率:19200,每帧:1字节;无校验;1停止位 中断设置:考虑到后期使用freertos,可控制中断配置为:4位抢占优先级,15>=中断优先级级>=5(越低,优先级越高) DMA设置:以字节为数据单位,内存地址累加生成工程文件: 在stm32f1xx_it.h 文件添加 #defineBUFFER_SIZE100externvolatileuint8_trx_len;//接收一帧数据的长度externvolatileuint8_trecv_end_flag;//一帧数据接收完成标志externuint8_trx_buffer[BUFFER_SIZE];//接收数据
串口配置: 异步,波特率:19200,每帧:1字节;无校验;1停止位 中断设置:考虑到后期使用freertos,可控制中断配置为:4位抢占优先级,15>=中断优先级级>=5(越低,优先级越高) DMA设置:以字节为数据单位,内存地址累加生成工程文件: 在stm32f1xx_it.h 文件添加 #defineBUFFER_SIZE100externvolatileuint8_trx_len;//接收一帧数据的长度externvolatileuint8_trecv_end_flag;//一帧数据接收完成标志externuint8_trx_buffer[BUFFER_SIZE];//接收数据
本篇是根据GopherConSG2019“UnderstandingAllocations”演讲的学习笔记。UnderstandingAllocations:theStackandtheHeap-GopherConSG2019-YouTube理解分配:栈和堆你的程序中有两种内存,栈内存和堆内存。go中,每个go程都会有一个栈空间,整个程序有一个堆空间。变量是在栈还是堆上负责堆垃圾回收的GC会导致整个程序的延迟,而不仅仅是创建垃圾的部分。你可能会担心你的代码在堆中产生了多少垃圾。什么时候需要优化要有benchmarks基准来证明你的程序不够快(有大量的堆内存分配),够快就不用多此一举了。你要先确
本篇是根据GopherConSG2019“UnderstandingAllocations”演讲的学习笔记。UnderstandingAllocations:theStackandtheHeap-GopherConSG2019-YouTube理解分配:栈和堆你的程序中有两种内存,栈内存和堆内存。go中,每个go程都会有一个栈空间,整个程序有一个堆空间。变量是在栈还是堆上负责堆垃圾回收的GC会导致整个程序的延迟,而不仅仅是创建垃圾的部分。你可能会担心你的代码在堆中产生了多少垃圾。什么时候需要优化要有benchmarks基准来证明你的程序不够快(有大量的堆内存分配),够快就不用多此一举了。你要先确
小梅哥的这个ZYNQ开发板上的DDR3位于PS侧,PL侧想要使用DDR3作为缓存的话,得通过HP接口来与PS侧的DDR3控制进行通信。本次实验在小梅哥OV5640工程的基础上,通过修改VDMA的S2MM端的模块而来的。将VMDA的帧缓存区设为1,关闭帧同步的功能后,其实和DMA差不多。一、需要自定义的ip核这里列出的为自己写的IP核。小梅哥的工程里还用到了其它的自定义的IP核,这里就不列出了。1、串口接收图像数据模块该模块调用了之前写的串口8位接收模块,详情可点击查看。此外,本模块还调用16位宽、深度为1024的带数据计数的普通FIFO核该模块主要的思想就是将接收到的两个8位的数据拼接位1个1