我加入工作室参加的第一个比赛是第五届中国高校智能机器人创意大赛,我参加的赛项是开放部件组轮式自主格斗机器人。经历了没日没夜的调试,无数次欣赏凌晨四点半的夜晚,感受着每天就睡两三个小时伴随着疲惫的开心。在我和队友的共同努力之下,我们的成绩也很优异,获得了预期的奖项。虽然原本我还有一个电控队友,但是因为疫情他没能和我一起参与备赛,这是令人可惜的一点。但人生总要向前看,备赛最重要的当然是过程,结果只是水到渠成的必然,宝贵的经历是什么都无法替代的,它使我成长,助我进步。相信我们在以后也会继续向前的。在先学习DMA之前,我要先了解ADC的原理,然后在ADC程序实现的基础上使用DMA模式,可以加快数据采集
v4l2是Video4linux2的简称,是linux中关于视频设备的内核驱动,在Linux中,视频设备是设备文件,可以像访问普通文件一样对其进行读写,摄像头设备文件位置是/dev/video0。V4L2在设计时,是要支持很多广泛的设备的,它们之中只有一部分在本质上是真正的视频设备。 因为我们这篇文章不涉及内核部分摄像头驱动的实现,大致可以简单说下,内核部分的实现分两部分:1.我们要根据摄像头的种类,实现具体的摄像头传感器的驱动,这里可能有一些数据和控制的通信总线的协议。2.然后这个具体的驱动需要适配这个v4l2这个框架,然后向用户层映射成一个字符设备文件。
v4l2是Video4linux2的简称,是linux中关于视频设备的内核驱动,在Linux中,视频设备是设备文件,可以像访问普通文件一样对其进行读写,摄像头设备文件位置是/dev/video0。V4L2在设计时,是要支持很多广泛的设备的,它们之中只有一部分在本质上是真正的视频设备。 因为我们这篇文章不涉及内核部分摄像头驱动的实现,大致可以简单说下,内核部分的实现分两部分:1.我们要根据摄像头的种类,实现具体的摄像头传感器的驱动,这里可能有一些数据和控制的通信总线的协议。2.然后这个具体的驱动需要适配这个v4l2这个框架,然后向用户层映射成一个字符设备文件。
好久没写博客了,最近挺忙的。近来有些好玩的实现,网上的资料并不是非常详细,打算慢慢写下来,希望别人能少走一点弯路。因为希望提高ADC的采样率,这次我试着实现了一下三重ADC交替采样+DMA搬运至内存+TIM的TRGO触发采样(环境是stm32cubemx6.5.0和keil5) 首先打开cubemx进行基础设置(设置时钟树,RCC,SYS)然后设置ADC1(下图为具体设置,仅供参考)此处我们将ADC_Mode设置为Tripleregularsimultaneousmodeonly,并打开DMA连续请求(为了使DMA能够填满数组,按照我们的预期工作)外部触发源设置为TIM2的TRGO由于已经设置
好久没写博客了,最近挺忙的。近来有些好玩的实现,网上的资料并不是非常详细,打算慢慢写下来,希望别人能少走一点弯路。因为希望提高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];//接收数据