控制寄存器

SPI协议(2)

好久不见. 提交于 2020-03-05 23:28:53
转自: http://www.sohu.com/a/211324861_468626 1、 SPI简介 SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。 是Motorola首先在其MC68HCXX系列处理器上定义的。 SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。 SPI是一种高速的,全双工,同步的通信总线 ,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。 2、 SPI特点 2.1采用主-从模式(Master-Slave) 的控制方式 SPI 规定了两个 SPI 设备之间通信必须由主设备 (Master) 来控制次设备 (Slave)。 一个 Master 设备可以通过提供 Clock 以及对 Slave 设备进行 片选 (Slave Select) 来控制多个 Slave 设备。 SPI 协议还规定 Slave 设备的 Clock 由 Master 设备通过 SCK 管脚提供给 Slave 设备, Slave 设备本身不能产生或控制 Clock, 没有 Clock 则 Slave 设备不能正常工作。 2.2采用同步方式(Synchronous)传输数据

SPI详解

江枫思渺然 提交于 2020-02-23 16:10:17
1、 SPI简介 SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。 2、 SPI特点 2.1采用主-从模式(Master-Slave) 的控制方式 SPI 规定了两个 SPI 设备之间通信必须由主设备 (Master) 来控制次设备 (Slave). 一个 Master 设备可以通过提供 Clock 以及对 Slave 设备进行片选 (Slave Select) 来控制多个 Slave 设备, SPI 协议还规定 Slave 设备的 Clock 由 Master 设备通过 SCK 管脚提供给 Slave 设备, Slave 设备本身不能产生或控制 Clock, 没有 Clock 则 Slave 设备不能正常工作 2.2采用同步方式(Synchronous)传输数据 Master 设备会根据将要交换的数据来产生相应的时钟脉冲(Clock Pulse),

STM32初练总结(TIM)

寵の児 提交于 2020-02-01 10:31:46
STM32初练总结(TIM) 总结下最近学习STM32 中定时器的一些心得。STM32有三种类型的TIM,基本型,通用型和高级TIM,这里只针对通用型TIM,其他类型的定时器可以参考datasheet。 TIM定时器应用 1、用在程序中需要设置定时的地方,比如某些需要等待一定周期的时间后再执行的代码。 2、可以用于产生PWM波形,控制占空比。 3、可以用于产生单脉冲,作为触发信号输出。 5、可以作为内部程序的中断触发源。 。。。还有其他能用到的地方,用到了再总结。 TIM定时器使用 TIM定时器的时钟源来自内部时钟CLK_INT,在这一时钟的基础上可以通过配置 预分频器寄存器 (TIMx_PSC)进行二次分频,得到需要的频率。 另外一个重要的寄存器是计数器寄存器(TIMx_CNT),是TIM的计数器,可以递增或者递减,通过配置寄存器实现控制。 还有一个重要的寄存器是自动装载寄存器 (TIMx_ARR),这个寄存器配置了TIM每次累加达到的阈值或者递减的起始值,由用户配置。 除此之外,还有一些辅助的寄存器来控制中断使能和产生中断等,以及TIM输入输出的模式等。 TIM代码 用TIM2实现1s定时的代码如下: void Time2_Init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef

乘法器的实现

巧了我就是萌 提交于 2020-02-01 06:04:01
如果希望CPU支持某一种运算,我们就需要用硬件电路来实现对应的功能部件。我们现在已经有了一种乘法运算的方法,适合硬件来进行实现。而且,我们还掌握了一些硬件电路的基本知识。我们就可以一起来尝试如何构建一个硬件的乘法器。 现在我们来看乘法器是怎么实现的。我们用一个简单的二进制乘法作为例子,1000乘以1001,这是两个四位的二进制数相乘,那么为此我们要实现一个四位的乘法器。 首先我们需要一个寄存器来保存被乘数(Multiplicand),被乘数寄存器是一个8位的寄存器,而且带有左移的功能。它有一个左移的控制信号输入,当外部的控制逻辑(Control test)将这个信号视为有效时,在下一个时钟顺延到来的时候,被乘数寄存器当中的内容就会向左移动一位。 第二个寄存器是乘积(Product)寄存器,这也是一个8位的寄存器,用来保存运算的结果。被乘数寄存器当中的内容和乘积寄存器当中的内容需要进行加法运算,这里我们就需要进行一个8位的加法器,它会将被乘数寄存器当中的内容和乘积寄存器当中的内容进行相加,并将结果再送到乘积寄存器当中。 另外,我们还需要一个寄存器来保存乘数。这个寄存器只要4位就可以了,但有一点比较特殊,乘数寄存器的最低位被连到了控制逻辑(Control test),也就说控制逻辑可以观察当前乘数寄存器的最低位,并据此来生成相关的控制信号。这些控制信号就包括是否要让加法器进行加法运算

STM32的SPI问题。

做~自己de王妃 提交于 2020-01-31 09:25:56
问题描述 : 之前一直使用的单片机是LPC2109,对其SPI很熟悉。基本就是原本拿来稍作修改就用。 由于某种原因需要使用STM32,然后设备的驱动是之前写好的,只修改了一些硬件控制端口,由于硬件驱动使用到了SPI接口,而我是把SPI接口提供了出来,本来以为简单修改SPI配置到对应单片机就行了。简单看了STM3的SPI配置,轻车熟路改代码,瞬间体现了良好的接口有哈。 编译,生成目标文件,下载运行。 并没有出现预想的结果。由于之前的设备驱动是能用的,所以排除设备驱动问题。 开始以为是由于对STM32端口配置的不熟悉导致的、看手册,看别人代码,没发现问题。 debug........ 问题定在SPI代码上。查看配置,一样啊。郁闷!!! 把自己配置考到别人能用的代码中,可以使用。更加郁闷!!!! debug看寄存器。对比能运行代码寄存器状态。发现运行到一段代码的时候寄存器不同 SPI_CR 0x0043 SPI_CR 0x0002 看datasheet.OVR置位。问题应该就在这了。可是为什么呢?????? 搜此问题,此处出自 这里 溢出错误(OVR)  溢出错误表示连续传输多个数据时,后一个数据覆盖了前一个数据而产生的错误。  状态标志SPIF表示的是数据传输正在进行中,它对数据的传输有较大的影响。主器件的SPIF有效由数据寄存器的空标志SPTE=0产生

STM32库函数与寄存器的区别

无人久伴 提交于 2020-01-30 02:15:11
#STM32库函数与寄存器# 1.固件库是什么?与寄存器有什么关系? 固件库就是函数的集合,向下与寄存器直接打交道,向上提供用户调用函数的接口(API) 2.最佳使用情况 寄存器:单独对IO口状态控制,对寄存器进行位操作(如51) 调试debug时对寄存器进行位操作(需要理解与什么寄存器有关并理解过程,调试时翻阅寄存器手册) 库函数:寄存器数量过多(如STM32)调用库函数 来源: CSDN 作者: 等登灯灯 链接: https://blog.csdn.net/qq_45163431/article/details/104109431

STM32 中断优先级管理NVIC

放肆的年华 提交于 2020-01-29 17:57:19
STM32内核为CM3 CM3内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。 STM32并没有使用CM3内核的全部东西,而是只用了它的一部分。 STM32有84个中断,包括16个内核中断和68个可屏蔽中断,具有16级可编程的中断优先级。 STM32F103系列上面,又只有60个可屏蔽中断(在107系列才有68个) 1.中断管理方法 首先,对STM32中断进行分组,组0~4。同时,对每个中断设置一个抢占优先级和一个响应优先级值。 (分组配置是在寄存器SCB->AIRCR中配置) 抢占优先级 & 响应优先级区别 高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。 抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断。 抢占优先级相同的中断,当两个中断同时发生的情况下,哪个响应优先级高,哪个先执行。 如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行。 PS:一般情况下,系统代码执行过程中,只设置一次中断优先级分组,比如分组2,设置好分组之后一般不会再改变分组。随意改变分组会导致中断管理混乱,程序出现意想不到的执行结果。 2.相关寄存器 中断设置相关寄存器 __IO uint8_t IP[240]; //中断优先级控制的寄存器组 __IO uint32_t ISER[8]; /

RTC时钟

时间秒杀一切 提交于 2020-01-29 16:56:25
RTC实时时钟 一、概念 后备区域是指STM32待机的时候还可以保证时钟运行,时间准确。 RTC所采用的时钟源:一般使用比较准确的外部时钟源 RTC工作原理图: 从上图可以将RTC划分为两部分: 后备寄存器就是BKP备份寄存器: RTC相关的寄存器: :RTC控制寄存器高位:用来使能或者禁止溢出、秒、闹钟中断。 :RTC控制寄存器低位:配置RTC需要设置的寄存器等 二、配置 RTC相关库函数:RCC_RTCCLKConfig和RCC_RTCCLKCmd在stmf10x_rcc.h中定义。 最后:RTC配置的一般步骤: 来源: CSDN 作者: 林中明月间 链接: https://blog.csdn.net/qq_39171574/article/details/104106059

ARM之GPIO介绍(Exynos4412平台)

耗尽温柔 提交于 2020-01-29 03:36:09
GPIO 概述 :GPIO的英文全称是General-Purpose Input/Output,也就是通用输入输出。在微控制器芯片上一般都会提供一个“通用可编程IO接口”,即GPIO.接口至少有两个寄存器,即“通用IO控制寄存器”和“通用IO数据寄存器”。 特性 46个可中断通用控制I/O; 172个外部中断; 32个外部可唤醒中断; 252个多路复用I/O口; 睡眠模式引脚状态可控(除了GPX0,GPX1,GPH2,GPH3); GPIO常用寄存器 引脚控制寄存器(GPxCON x=A0~V4) 在exynos4412中,大多数的引脚都是功能复用的,所以必须对每个引脚进行配置。引脚控制寄存器(GPxCON)用来配置每个引脚的功能。 引脚数据寄存器(GPxDAT x=A0~V4) 如果引脚功能被配置为输出功能,可以通过向GPxDAT寄存器对应位写入数据,控制引脚输出相应电平。如果引脚被配置为输入功能,则可以从GPxDAT寄存器对应位读出数据读回的数据就是当前引脚的电平状态。 引脚上拉下拉设置寄存器(GPxPUD x=A0~V4) exynos4412芯片的内部给引脚设置了上拉电路和下拉电路,通过引脚上下拉设置寄存器控制引脚上拉电阻和下拉电阻的使能和禁止。如果引脚的上拉电阻被使能,则无论在哪种状态(输入、输出、DATAn、EINTn等其他功能)下,上拉电阻都起作用。

位带操作

隐身守侯 提交于 2020-01-28 07:34:43
本质都是操作相关寄存器来控制io口 原理映射原理 把每个比特膨胀为一个32位的字,当访问这些字的时候就达到了访问比特的目的,通过算法使每个比特都有不同的字来替代。 比如BSSR寄存器有32个位就可以映射运算到32个字地址上去,通过改写这些地址数据来改变寄存器上的位。 编程实例 位带操作在sys.h的头文件里封装 直接使用 PAout(N)=1 (输出 1高电平 0低电平)(n为io口0——15) PAin(n)=1 (输入 1高电平 0低电平)(n为io口0——15) #define LED0 PAout(5) 宏定义LED0为PAout(5)PA io寄存器的第五io口 注 使用之前一样需要初始化 来源: CSDN 作者: qq_44726883 链接: https://blog.csdn.net/qq_44726883/article/details/103848141