南宁新技术产业建设开发总公司网站,用虚拟主机好还是阿里云wordpress,怎么增加网站首页权重,网站开发资金个人主页~ SPI通信和RTC实时时钟 SPI通信一、简介二、硬件电路三、基本原理四、SPI时序1、时序基本单元2、时序 五、FLASH操作注意事项1、写入操作2、读取操作 六、SPI外设1、简介2、结构 七、传输方式1、主模式全双工连续传输2、非连续传输 RTC实时时钟一、Unix时间戳二、BKP1… 个人主页~ SPI通信和RTC实时时钟 SPI通信一、简介二、硬件电路三、基本原理四、SPI时序1、时序基本单元2、时序 五、FLASH操作注意事项1、写入操作2、读取操作 六、SPI外设1、简介2、结构 七、传输方式1、主模式全双工连续传输2、非连续传输 RTC实时时钟一、Unix时间戳二、BKP1、简介2、基本结构 三、RTC1、简介2、基本结构3、注意事项 SPI通信
一、简介
有四根通信线SCKSerial Clock 串行时钟线、MOSIMaster Output Slave Input 主机输出从机输入、MISOMaster Input Slave Output 主机输入从机输出、SSSlave Select 从机选择
同步时序SCK全双工MOSI、MISO
支持总线挂载多设备是一主多从有一条专门用来进行从机选择的线SS一机一根
二、硬件电路 看清楚箭头箭头是传输方向
每有一个从机SPI主机都要引出一根SS线连接
这里的端口电压为比较电压是相对于GND的电压所以所有设备需要共地如果从机没有电源的话还需要从主机VCC连接线来供电
主机通过置SS为低电平选择从机进行通信在初始状态时主机的所有SS引脚都为高电平且在同一时间只能与一个从机进行通信
输出引脚配置为推挽输出输入引脚配置为浮空输入或上拉输入
三、基本原理 SPI通信的基本原理就是进行移位交换
首先波特率发生器存在于主机由主机控制通过SLK线使从机同步时序移位寄存器都是向左移位移出后在MOSI和MISO产生相应的电平变化如下图所示 向左移位移出同时通信线发生移出数字相应的电平变化然后再写入 如此往复八次就能实现一个字节的迁移这是同时发送接收的情况
在只进行发送和只进行接收的时候也是一样的移位和迁移但只进行发送时此时从机移位寄存器中的值为无效值通常为0x00或0xFF只进行接收的时候主机移位寄存器中的值为无效值
四、SPI时序
起始条件SS从高电平切换到低电平 终止条件SS从低电平切换到高电平
1、时序基本单元
CPOL时钟极性 CPHA时钟相位
CPOLCPHA模式说明00模式0空闲状态时SCK为低电平SCK第一个边沿移入数据第二个边沿移出数据01模式1空闲状态时SCK为低电平SCK第一个边沿移出数据第二个边沿移入数据10模式2空闲状态时SCK为高电平SCK第一个边沿移入数据第二个边沿移出数据11模式3空闲状态时SCK为高电平SCK第一个边沿移出数据第二个边沿移入数据
在SS由高电平切换到低电平后在SCK第一个边沿CPOL0是上升沿CPOL1是下降沿之前MOSI和MISO开始变换电平在第一个边沿移入CPHA0CPHA1为移出数据然后在第二个边沿CPOL0是下降沿CPOL1是上升沿移出CPHA0CPHA1为移出数据
但是在CPHA0的情况下第一个数据还没有移出肯定是没有办法移入的所以在SS下降沿时在SCK第一个边沿之前就要触发移出数据移出数据是对应着MOSI和MISO上升或下降沿的
2、时序
SPI的时序与I2C的时序基本相同有些细微的差别不多赘述
五、FLASH操作注意事项
1、写入操作
写入操作之前要先进行使能
每个数据位只能由1改写为0不能由0改写为1
写入数据前必须先擦除擦除后所有数据位变为1因为这样可以使再写入的数据保持原样
擦除必须按最小擦除单元一个扇区进行没办法只擦除一个指定字节只能整片一起擦除非该扇区只存储了这一个字节
连续写入多字节时最多写入一页的数据缓冲区存储超过页尾位置的数据会回到页首覆盖写入
写入或者擦除操作结束后芯片进入忙状态不响应新的读写操作忙状态就是缓冲区向FLASH写入的这个状态读取状态寄存器如果BUSY位为1就是忙状态如果为0就不是忙状态了就可以继续响应新的操作了
2、读取操作
直接调用读取时序无需使能无需额外操作没有页的限制读取操作结束后不会进入忙状态但不能再忙状态时读取
六、SPI外设
1、简介
STM32内部集成了硬件SPI收发电路可以由硬件自动执行时钟生成、数据收发等功能、减轻CPU的负担
时钟频率只能为外部时钟除以2,48,16,32,64,128,256来得到
支持多主机模型或一主多从模型
可精简为半双工或单工通信半双工就是在SPI的两条通信线中选择一条进行双向通信类似于I2C单工通信就是指去除SPI两根通信线的某一根另一根功能不变
2、结构 先看左上角红色方框这里是一个重叠电路因为MOSI在设备时主机时输出是从机时输入MISO同理所以在设备做主机和从机时所走的线路不一样因为接在移位寄存器上的线路是不变的所以我们要改变前面的线路在做主机时就是从蓝色的线直接进出做从机时输出就在上方蓝线经过红色方框的电路时走到下方的棕色线上去然后从MISO输出输入就是从MOSI进入时走下方棕色线到移位寄存器
然后绿色椭圆就是发送接收的缓冲区以及移位寄存器LSBFIRS控制位控制移位为左移还是右移要发送的数据写入发送缓冲区后一位一位地移入移位寄存器然后再由移位寄存器一位一位地移出此时TXE和RXNE的变化与USART串口的相同不过串口有两个移位寄存器这里只有一个
下方的蓝色椭圆中就是波特率发生器外接时钟可以如上面所说的按照指定比例分频与移位寄存器时序相同这里的波特率发生器由绿色方框中的BR0、BR1、BR2共同控制
最后就是蓝色方框以及绿色方框中的寄存器我们可以看到蓝色方框中我们熟悉的寄存器如TXE和RXNE绿色方框中的CPOL、CPHA
七、传输方式
连续传输适用于高性能、高要求的传输相应地其代码也要更加复杂如果没有严格要求可以使用非连续传输更简单一些
1、主模式全双工连续传输 这里的BSY标志就是上面提到的BUSY
发送 开始时TXE为1表示发送缓冲器TDR为空可以写入并传输然后看下方的指示发送缓冲器TDR被写入0xF1同时TXE置0然后发送缓冲器TDR中的数据会转入移位寄存器此时TXE置为1然后移位寄存器就开始发送波形开始生成
然后按照下方指示2写入0xF1之后软件等待TXE1也就是在发送缓冲器TDR中的数据转入到移位寄存器时写入发送缓冲器TDR第二个数据0xF2当第一个数据0xF1发送完毕后第二个数据0xF2就转入到移位寄存器中发送同时第三个数据再写入发送缓冲器TDR以此类推
当发送最后一个数据时最后一个数据转入移位寄存器后TXE置为1当BSY标志位0时表示当前不忙也就是发送完毕
接收 当第一个数据接收完成时转入接收缓冲器RDR转入的同时RXNE置1检测到RXNE为1时就读出RDR等CPU读出后RXNE置0重复上述过程读取多个数据
RDR中的数据在写入后要尽快读走要在下一个数据写入之前因为RDR再被写入前一个数据就会被覆盖
2、非连续传输 该图只有输出没有输入因为非连续传输的原理比较简单一发一收
发送 这里跟上面其实是一样的只不过在这里主要看BSY位因为非连续传输不需要连续所以一个数据写入TDR后移位到移位寄存器发送此时TDR为空但此时不需要再写入新的数据到TDR中在BSY位置为0时再写入然后重复上述过程
接收 输入就更简单了当数据写入移位寄存器后由移位寄存器转移到RDR中此时不用紧跟着数据写入移位寄存器而是在移位寄存器RDR中的数据读出后再继续写入下一个数据到移位寄存器重复上述过程
RTC实时时钟
一、Unix时间戳
Unix时间戳定义为伦敦时间从1970年1月1日0时0分0秒开始所经过的秒数
时间戳存储在一个秒计数器中秒计数器为32位或64位的变量 也就是说如果该变量为无符号型也就是它所能承受的最大值为2^32-1或2 ^64-1后面这个数字是非常大的宇宙级别的时间所以现在随着科技的进步很多设备都给上64位的版本了
世界上所有时区的秒计数器相同不同时区通过添加偏移量来得到当地时间这个偏移量其实就是时差 0秒标志着伦敦时间1970年1月1日0时0分0秒北京时间1970年1月1日8时0分0秒
二、BKP
1、简介
BKP就是备份寄存器可用于存储用户应用程序数据当VDD电源系统主电源2.0~3.6V被切断它们仍然由VBAT备用电池电源1.8 ~ 3.6V维持供电当系统在待机模式下被唤醒或系统复位或电源复位时它们也不会被复位
TAMPER引脚产生的侵入事件将所有备份寄存器内容清除这是一个保护功能防拆作用
RTC引脚输出RTC校准时钟、RTC闹钟脉冲或秒脉冲
存储RTC时钟校准寄存器
用户数据存储容量为20字节小容量和中容量设备或84字节大容量和互联型设备
2、基本结构 BKP先通过VDD进行供电在有主电源VDD的情况下优先使用主电源供电
数据寄存器是16位的每个寄存器可以存储两字节小容量和中容量的设备一般有10个数据寄存器从DR1到DR10大容量和互联型的设备一般有42个数据寄存器从DR1到DR42
因为BKP与RTC联系紧密所以BKP中有控制RTC的部分
三、RTC
1、简介
RTC就是实时时钟是一个独立地定时器可为系统提供时钟和日历的功能
RTC和时钟配置系统处于后备区域系统复位时数据不清零VDD断电后可借助VBAT供电继续走时同BKP
32位的可编程计数器可对应Unix时间戳的秒计数器
20位的可编程预分频器可适配不同频率的输入时钟
可选择三种RTC时钟源 HSE外部高速晶振时钟除以128 LSE外部低速晶振振荡器时钟主要使用只有这个连接着备用电源 LSI内部低速晶振振荡器时钟
2、基本结构 RTC时钟外接一个RTCCLK一般是外部低速晶振红色方框里的就是一个预分频器与前面介绍过的预分频器其实是一种类型并且实现方式相同只是这里用了不同的名字
然后就是绿色方框里的就是一个32位的可编程计数器是无符号32位最多使用到2106年到时候就会发生溢出就可以产生一个溢出中断也就是RTC_Overflow中断绿框中还一个闹钟设备RTC_ALR给它定一个时间当CNTALR时就会触发RTC_Alarm中断也可以通过下面的线退出待机模式最后还有一个中断就是RTC_Second中断是每秒进一个中断
右边的三个中断F结尾的是对应的中断标志位IE结尾的是中断使能凉凉通过一个与门之后三个中断连接到一个或门连接NVIC中断控制器 上图就是RTC外部电路一个是备用电池供电一个是外部低速晶振
备用电池在标准下应该用推荐连接这里在电路上有两个二极管这两个二极管的作用就是防止电流倒灌在有外接电源时使用3.3V的外部电源在无外部电源时使用备用电池B2供电外部还需要接一个0.1uF的滤波电容
3、注意事项
设置RCC_APB1ENR的PWREN和BKPEN使能PWR和BKP时钟 设置PWR_CR的DBP使能对BKP和RTC的访问
若在读取RTC寄存器时若RTC的APB1接口处于禁止状态则软件首先必须等待RTC_CRL寄存器中的RSF位寄存器同步标志被硬件置1
必须设置RTC_CRL寄存器中的CNF位使RTC进入配置模式后才能写入RTC_PRL、RTC_CNT、RTC_ALR寄存器
对RTC任何寄存器的写操作都必须在前一次写操作结束后进行可以通过查询RTC_CR寄存器中的RTOFF状态位判断RTC寄存器是否处于更新中仅当RTOFF状态位为1时才可以写入RTC寄存器 这跟上面的忙状态差不多 今日分享就到这里了~