外设

DSP与STM32大PK

徘徊边缘 提交于 2020-02-22 22:57:07
1.FPGA:是可编程逻辑阵列,常用于处理高速数字信号,不过随着科技的发展,现在很多FPGA CPLD可以集成mcu内核,甚至具备了ARM DSP的功能 2.ARM,是一类内核的称谓,就像51一样,具体到芯片的话,会有很多不同的厂家不同等级,诸如三星、易法、飞利浦、摩托罗拉等等,其中STM32是易法半导体的一款面向工控低功耗内核为Cortex M3内核的ARM芯片 3.DSP顾名思义就是数字信号处理,厂家主要是德州仪器(TI)主要用于数字型号处理等对运算速度有特殊要求的场合,诸如音频视频算法,军工等领域,但同时dsp有2000 5000 6000等系列也可满足不场合需要 1.FPGA一般不会用来做复杂的系统,只用来做些简单的系统如状态机实现的自动售货机...展开>等,多少还是用来做信号的高速变换和处理,毕竟它只是可编程逻辑阵列。 2.ARM和DSP就各有千秋了; ARM的系列从V3 V5 V7 V9 XSCALE,从thumb指令到arm指令(thumb arm也可同时实现),可以说遍布机会所有的领域,只要你接的价格可以接受(其实许多arm并不是很贵的),单片机所有的功能基本他都能实现,我就不用举例子,特别是现在与各种RTOS结合更是开发方便功能强大。 DSP相对arm价格要贵些,这也是可能个体厂家使用较少的一个原因吧,2000系列主要用于工控特别是2812这个用的人比较多

为什么说嵌入式开发比单片机要难很多?谈谈单片机和嵌入式的经验

巧了我就是萌 提交于 2020-02-19 11:37:37
单片机和嵌入式,其实没有什么标准的定义来区分他们,对于进行过单片机和嵌入式开发的开发者来说,都有他们自己的定义,接下来,就谈谈本人对这两个概念的理解和感悟。 首先明确概念,什么是单片机,单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。 比如最经典的51系列单片机,如下图所示,外观只是一块一个拇指大小的长方体芯片,共40个引脚,里面包含了逻辑运算单元。实际上也就是一个cpu。 在最开始接触单片机的时候,还曾经有过一个疑问,为什么单片机是黑色的而不可以是别的颜色,后来才知道是单片机材料的限制。 对单片机而言,其实一个芯片就是全部,其他的比如单片机最小系统都是为了单片机的正常运作而加入其他元件,比如晶振,5v电源,电感电阻等。当然最小系统只能保证单片机正常运行,几乎实现不了基于单片机的任何应用。 为了使单片机实现应用,必须要加入其他外设。比如按键,led灯,led屏,蜂鸣器,各种sensor。这也就是市面上很多公司都在做的单片机开发板。 总结

STM32F4x系列的DMA配置

不想你离开。 提交于 2020-02-15 20:47:28
以SPI2 为例,将存储器中的数据,通过DMA方式搬运到外设,DMA配置步骤: 1、选择DMA1还是DMA2:通过图1可查看到SPI2是在DMA1表里,所以选择DMA1。   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1,ENABLE); 2、选择数据流:该配置应该放在所有信息配置完在使能。   DMA_Cmd(DMAX_StreamY, ENABLE);   其中X = 1、2,Y=0、1…7,有两个DMA,分别是DMA1和DMA2,每个DMA控制器有又有8个数据流。   问题1:一个外设怎么知道选哪个数据流呢?   答:先查看参考手册,找到DMA1/2请求映射表,如下图1、2 图1 图2   比如现在用到外设SPI2_TX(存储器的数据搬运到外设,所以得找发送) ,选择数据流4。   DMA_Cmd(DMA1_Stream4, ENABLE); 3、通道选择,有8个通道,不是随便选择的,得查看图1和图2,SPI2外设所对应的通道0。   DMA_InitStructure.DMA_Channel = DMA_Channel_0; 4、设置外设基地址。   DMA_InitStructure.DMA_PeripheralBaseAddr = 0Xxxxx;    问题2:怎么知道当前选用外设的基地址?看人家例子都是写好了的,到时换其他外设

RT600 I2S外设介绍及应用

穿精又带淫゛_ 提交于 2020-02-14 14:48:50
恩智浦的i.MX RT600是跨界处理器产品,同样也是i.MX RTxxx系列的开山之作。不同于i.MX RT1xxx系列单片机,i.MX RT600 采用了双核架构,将新一代Cortex-M33内核与高性能Cadence Tensilica HiFi 4 音频DSP内核相结合,适用于32位沉浸式音频播放和视频用户界面应用。i.MX RT600旨在通过安全、功率优化的嵌入式处理器充分挖掘语音辅助终端节点的潜力,因此针对音频数据的采集、传输和处理,i.MX RT600都有丰富的硬件资源进行支持。其中,针对RT600的I2S外设,本文详细地进行了介绍,并基于i.MX RT600 EVK开发板,在RT600的DSP端(HiFi4)实现了一个音频数字回环的demo。 一、I2S介绍 1.1 I2S 接口 I2S总线为数字音频流的传输提供了标准的通信接口,由飞利浦制定。I2S总线规范定义了一种3线串行总线,分别是: 1、串行时钟SCK(也称位时钟BCLK),这是SDA线上数据的位时钟。对应SDA的每一个数据位,SCLK都有产生一个脉冲。 2、帧时钟WS(也称LRCK,或FSYNC),以大多数单一立体声格式的PDM数据来说,WS用于切换左右声道的数据;在DSP或TDM模式下用作帧定界符。此外,I2S的采样频率是由WS频率决定的。 3、串行数据(SDA),就是用二进制表示的音频数据流

ESP8266 SDK开发: 外设篇-定时器,延时

假如想象 提交于 2020-02-14 01:14:49
延时 /** * @brief Delay function, maximum value: 65535 us. * * @param uint16 us : delay time, uint: us, maximum value: 65535 us * * @return null */ void os_delay_us(uint16 us); 软件定时器 代码 #include "esp_timer.h" /** * @brief 定时器回调函数 * @param parg:传入的配置os_timer_setfn函数最后的参数 * @param None * @param None * @param None * @retval None * @warning None * @example **/ void os_timer_one_function(void *parg) { printf("parg:%s\n", parg);//打印一下传过来的参数 } //配置定时器 os_timer_setfn(&os_timer_one,os_timer_one_function,"yang");//os_timer_one:定时器结构体变量 os_timer_one_function:回调函数 yang:传给回调函数的参数 //使能定时器 os_timer_arm(&os

用LabVIEW制作STM32外设驱动空文件懒人创建工具

荒凉一梦 提交于 2020-02-07 00:20:43
在学习STM32时,经常要针对一些外设,如LED、HX711模数转换、ADS1256,编写其驱动,需要手动建立如LED.h头文件和LED.c。我是个懒人,虽然平时要用的外设也不多,都已经有自己的库函数了,但还是利用LabVIEW做了一个创建.c .h文件的工具。 实现方式: 1.程序总体建立在while循环中的时间结构中,触发条件是“新建按钮”被按下,即运行条件结构中的程序。 2.利用“创建文件夹”控件路由到要创建文件夹的绝对路径,然后用“创建路径”控件接收上一部的绝对目标路径,并用“创建文件”控件接收上一步选择的路径和输入的文件名,拼接成.c或.h的绝对路径,使用“创建文件”接收上一部的路径创建文件,用“写入文本文件”控件接收上一部的句柄和文件内要写入的东西(如#include"stm32f10x.h"),然后关闭文件,至此文件创建和写入内容完成。 3.文件名和写入的内容与外设的名字有关(如外设为HX711,一般写为hx711.c和hx711.h),故用到拼接字符串函数。 4.最后,将各控件的错误合并,将其与用于终止while循环的按钮取或运算,这样,一旦你按终止按钮或者是程序运行中报错都可以及时终止运行。 程序框图: 运行中的前面板: 结果: 来源: CSDN 作者: Pilot.Phil 链接: https://blog.csdn.net/qq_37769785

stm32中断概览

落花浮王杯 提交于 2020-02-04 22:12:21
STM32 中断非常强大,每个外设都可以产生中断。 异常类型 F429 在内核水平上搭载了一个异常响应系统, 支持为数众多的系统异常和外部中断。其中系统异常有 10 个,外部中断有 91 个。除了个别异常的优先级被定死外,其它异常的优先级都是可编程的。 NVIC NVIC 是嵌套向量中断控制器,控制着整个芯片中断相关的功能,它跟内核紧密耦合,是内核里面的一个外设。 中断配置 在配置中断的时候我们一般只用 ISER、ICER 和 IP 这三个寄存器,ISER 用来使能中断,ICER 用来失能中断,IP 用来设置中断优先级。 中断优先级 在 NVIC 有一个专门的寄存器:中断优先级寄存器 NVIC_IPRx(在 F429 中,x=0…90) 在 F429 中,只使用了高 4bit,如下所示 用于表达优先级的这 4bit,又被分组成抢占优先级和子优先级。如果有多个中断同时响应,抢占优先级高的就会 抢占 抢占优先级低的优先得到执行,如果抢占优先级相同,就比较子优先级。如果抢占优先级和子优先级都相同的话,就比较他们的硬件中断编号,编号越小,优先级越高。 优先级分组 优先级的分组由内核外设 SCB 的应用程序中断及复位控制寄存器 AIRCR 的PRIGROUP[10:8]位决定,F429 分为了 5 组,具体如下:主优先级=抢占优先级 设置优先级分组可调用库函数 NVIC

2、LED实验

a 夏天 提交于 2020-02-04 22:01:36
CC2530的IO口概述   CC2530芯片有21 个数字输入/输出引脚,可以配置为通用数字I/O 或外设I/O 信号,配置为连接到ADC、定时器或USART外设;这些I/O 口的用途可以通过一系列寄存器配置,由用户软件加以实现   I/O 端口具备如下重要特性:     (1)21 个数字I/O 引脚     (2)可以配置为通用I/O 或外部设备I/O     (3)输入口具备上拉或下拉能力     (4)具有外部中断能力   21 个I/O 引脚都可以用作于外部中断源输入口,因此如果需要外部设备可以产生中断, 外部中断功能也可以从睡眠模式唤醒设备 未使用的I/O 引脚处理   未使用的I/O 引脚电平是确定的,不能悬空;一个方法是使引脚不连接,配置引脚为具有上拉电阻的通用I/O输入,这也是所有引脚复位后的状态(除了P1.0 和P1.1 没有上拉/下拉功能);或者引脚可以配置为通用I/O输出,这两种情况下引脚都不能直接连接到VDD 或GND, 以避免过多的功耗 低I/O电压   在数字I/O 电压引脚DVDD1和DVDD2低于2.6V的应用中,寄存器位PICTL.PADSC应设置为1,以获得DC特性表中所述的输出DC 特性 通用I/O   用作通用I/O 时,引脚可以组成3个8位端口,端口0、端口1 和端口2,表示为P0、P1 和P2;其中,P0和P1 是完全的8 位端口

大话STM32F103系统架构

吃可爱长大的小学妹 提交于 2020-02-02 20:39:54
前言   许多像我一样的STM32初学者,都往往忽视了STM32系统架构的学习。这对于实际应用并没有啥大的影响,但是总感觉怎么学也无法看清STM32的全貌,所以本文我将带领大家一起厘清STM32F103的总线结构和各部分外设之间的关系。在《三体》小说中,作者曾用军队阵列的方法模拟了冯诺依曼架构的计算机,读来画面感十足,且易于理解,本文也力求解释的形象与生动。 系统全貌   在罗列各个方阵前,我们有必要先登上高山,一览军队全貌,如官方手册里的框图所示,相比51单片机,STM32F103系统还是相当复杂的,但是其阵列也必将威武雄壮。 系统剖析 Cortex-M3内核   它是STM32F103的内核,也就是CPU,相当于元帅。除掉他,其他部件都是片上外设,注意是片上的,也就是那块我们肉眼所见的芯片里的外设。这位元帅足不出户,便可操纵队列,依靠的是自己强大的数字运算能力和强大的总线设计。在阵列中,数据的运算都呈报给元帅来做。 ICode总线   阵列的运行需要有人下达指令,元帅Cortex-M3是命令的下发者,却并非命令的产生者。那么命令从何而来?在《三体》中,冯诺依曼在布阵前早已想好了指令。同样,各位STM32的热爱者才是聪慧的命令发起者——我们写好的程序被译成机器指令存储于Flash中。ICode总线就是一队骑兵,将指令一条条送达给元帅Cortex-M3。 Bus-Matrix  

对阻塞,非阻塞,同步,异步的理解

别说谁变了你拦得住时间么 提交于 2020-01-31 22:53:01
对阻塞,非阻塞,同步,异步的理解一直很模糊,看了很多文章,也跟同学讨论了一下,写一下自己的理解,当然这个理解还是局限于自己当前的知识水平。有不对的地方,还请纠正 阻塞: 网上有说法是,阻塞就是这个线程不能干别的了,只能在这里等着。 我觉得这个说法不是很准确,我理解阻塞其实就是进程切换到阻塞态,不能占有CPU,这时候,进程就停止在这个阻塞调用上,不能继续向下执行。 Java的普通I/O就是BIO(Blocking I/O)。 Reads a byte of data from this input stream. This method blocks if no input is yet available. 上面是FileInputStream中的read()的描述,当调用read()时,这个程序的进程会被切换到阻塞态,直到操作系统准备好数据,进程才会切换到就绪态。所以说,This method blocks if no input is yet available. 在操作系统的五种I/O模型中, 阻塞I/O 如下 recvfrom是一个系统调用,这个系统调用并不会立即返回,会等到数据准备完成并且被拷贝到应用程序的缓冲区中,或者出现了一个错误,才会返回。 非阻塞: 有了阻塞的理解之后,就很简单,也就是说这个方法不会使进程被切换到阻塞态。 Java中的NIO(Non