基于STM32的RTC实时时钟实验

发布者:变形金刚最新更新时间:2022-05-31 来源: eefocus关键字:STM32  RTC  实时时钟 手机看文章 扫描二维码
随时随地手机看文章

RTC是什么?

STM32的RTC外设,实质是一个掉电后还继续运行的定时器,从定时器的角度来看,相对于通用定时器TIM外设,它的功能十分简单,只有计时功能(也可以触发中断).但是从掉电还能继续运行来看,它是STM32中唯一一个具有这个功能的外设(RTC外设的复杂之处不在于它的定时,而在于它掉电还可以继续运行的特性)。


所谓掉电,是指电源VDD断开的情况下,为了RTC外设掉电可以继续运行,必须给STM32芯片通过VBAT引脚街上锂电池.当主电源VDD有效时,由VDD给RTC外设供电.当VDD掉电后,由VBAT给RTC外设供电.无论由什么电源供电,RTC中的数据始终都保存在属于RTC的备份域中,如果主电源和VBA都掉电,那么备份域中保存的所有数据都将丢失(备份域除了RTC模块的寄存器,还有42个16位的寄存器可以在VDD掉电的情况下保存用户程序的数序,系统复位或电源复位时,这些数据也不会被复位)。


STM32系统时钟源简介

系统时钟包括了:


1. HSE高速外部时钟(常用8MHz无源晶振);


2. PLL时钟源(来源有HSE和HSI/2,一般选HSE作为时钟来源);


3. PLL时钟PLLCLK(通过设置PLL的倍频因子,一般8Mx9=72MHz,72MHz是官方推荐稳定运行时钟,最高128MHz);


4. 系统时钟SYSCLK(一般SYSCLK=PLLCLK=72MHz);


5. AHB总线时钟HCLK(是系统时钟SYSCLK经过AHB分频器分频后得到的时钟,也就是APB总线时钟,一般设置1分频,HCLK=SYSSCLK=72MHz);


6. APB2总线时钟HCLK2(APB2总线时钟PCLK2由 HCLK经过高速APB2预分频余数器得到,分频因子可以是:[1,2,4,8,16],具体由时钟配置寄存器CFGR的位13-11:PPRE2[2:0]决定,一般设置为 1 分频,即 PCLK2 = HCLK =72M);


7. APB1总线时钟HCLK1(APB1 总线时钟 PCLK1 由 HCLK 经过低速 APB 预分频余数器得到,HCLK1 属于低速的总线时钟,最高为 36M,这里只需粗线条的设置好 APB1 的时钟即可。


RTC的时钟系统

RTC的时钟来源有三个:


① 外部有源晶体震荡时钟源(32.768KHz);


② 内置RC无源震荡源(约为40KHz);


③ 外部无源高速震荡时钟(约62.5KHz)。


RTC的晶振

任何实时时钟的核心都是晶振,晶振频率为32768Hz(LSE时钟)。它为分频计数器提供精确的与低功耗的实基信号。它可以用于产生秒、分、时、日等信息。为了确保时钟长期的准确性,晶振必须正常工作,不能够收到干扰。RTC的晶振又分为:外部晶振和内置晶振。


RTC内部设备工作原理

RTC核心部分

RTC核心设备包括“预分频余数模块”与“计数器模块”。说白了,RTC核心设备的独立工作功能就是“自己按照设定的预分频余数因子,一个周期计数一次,计数值存在32位的计数器中”。


APB1接口部分

RTC核心设备虽然可以根据设定的参数自己独立运行,但是RTC的中断和标志位是由APB1接口部分来操作的。


APB1接口设备包括“CR控制寄存器”,这个寄存器是32位的,也就是说CR寄存器分为两个16位寄存器CRL与CRH寄存器,,这两个寄存器的功能为“控制RTC的中断”与“置位RTC的状态标志位”。


RTC寄存器简介

CR控制寄存器

CR寄存器是由CRL与CRH两个16位寄存器组成的,由APB1总线控制,因此当RTC独立运行时,也就是开发板的电源断电时,CR寄存器是无法发挥其作用的。


“允许中断标志位”可以进行写操作。

这些位的相应信息如下:

image.png

注:


① 我们一般使用APB1总线对RTC操作之前,先将RSF复位以清除原来的残余信息,然后等待置位,一旦置位就说明APB1与RTC时钟已同步我们可以进行写操作;


② 读操作之前一定要等待RSF时钟同步标志位置1,才可以进行读出正确的数据。


PRL重装载寄存器

重加载寄存器中的值在预分频余数计数器的值递减至0后,重新装载进入预分频余数寄存器。


DIV预分频余数寄存器



RTC预分频余数寄存器的作用就是获取更加精准的时间,工作原理如下:

我们看到:预加载余数寄存器每1s被自动重装载一次,即每1s减至0。


假如:我们此时读取的DIV预加载余数寄存器的值为0x3FFF,说明此时自上次重装载已经过去了0.5s,我们得到了比1s精确度更高的时间,这就是DIV预加载余数寄存器的作用。除此之外,DIV预加载余数寄存器还可以获得0.01s,0.001s这样更加精确的时间。


CNT计数器寄存器

ARL闹钟寄存器

如何对RTC进行写操作?

必须设置RTC_CRL寄存器中的CNF位,使RTC进入配置模式后,才能写入RTC_PRL、RTC_CNT、RTC_ALR寄存器。


另外,对RTC任何寄存器的写操作,都必须在前一次写操作结束后进行。可以通过查询RTC_CR寄存器中的RTOFF状态位,判断RTC寄存器是否处于更新中。仅当RTOFF状态位是’1’时,才可以写入RTC寄存器。


寄存器配置步骤如下:


① 等待上次对RTC的操作结束 等待RTOFF位置1;


② 取消写保护/进行配置模式 将CNF标志位置1;


③ 对一个或多个RTC寄存器进行写操作;


④ 写保护/取消配置模式 将CNF标志位复位(仅当CNF标志位被清除时,写操作才能进行,这个过程至少需要3个RTC时钟周期);


⑤ 查询RTOFF,直至RTOFF位变为’1’以确认写操作已经完成。


如何进行RTC数据的读操作?

APB1总线时钟复位的几种情况:


image.png

APB1复位就说明“APB1总线时钟与RTC时钟不再同步”。


若在读取RTC寄存器时,RTC的APB1接口曾经处于禁止状态,则软件首先必须等待 RTC_CRL寄存器中的RSF位(寄存器同步标志)被硬件置’1’。


RTC的复位操作

除了RTC_PRL、RTC_ALR、RTC_CNT和RTC_DIV寄存器外,所有的系统寄存器都由系统复


位或电源复位进行异步复位。


RTC_PRL、RTC_ALR、RTC_CNT和RTC_DIV寄存器仅能通过备份域复位信号复位。


在系统复位后,会自动禁止访问后备寄存器和RTC,以防止对后备区域(BKP)的意外写操作。所以在要设置时间之前, 先要取消备份区域(BKP)写保护。


当VDD电源被切断,后备区域与RTC核心部分仍然由VBAT维持供电。当系统在待机模式下被唤醒,或系统复位或电源复位时,他们也不会被复位。


关于RTC的疑难问题解析

为什么要等待APB1与RTC内部时钟同步后,我们对RTC中寄存器写操作才有效?

因为RTC时钟源和APB1接口的时钟源不同,一个来自32.768K晶振,一个来自8M晶振,他们的时钟一般会有一个差异的,所以才需要等待同步。


为什么RTC的时钟最准确(RTC时钟为何是准确的32768Hz)?


① RTC时间是以振荡频率来计算的。故它不是一个时间器而是一个计数器。而一般的计数器都是16位的。又因为时间的准确性很重要,故震荡次数越低,时间的准确性越低。所以必定是个高次数,即2^15=32768;


② 32768Hz=2^15即分频2^15次后为1Hz,周期=1s;


③ 经过工程师的经验总结32768Hz,时钟最准确;


④ 规范和统一。


为什么RTC和APB1有一些关联,他俩不是完全独立的吗?

不是的,我们的代码调试代码下载只能下载到STM32核心芯片中我们要通过STM32芯片来控制RTC设备就必须让RTC与APB1之间有接口。


为什么叫“秒标志位”?

因为RTC采用的是32.768KHz的晶振,PLR重装载寄存器(20位)的取值可以为32767,也就是说RTC可以没经过1s来置位一次“秒标志位”。我们通常的日历是以秒为最小的时间单位,因此RTC也可以提供我们日历的功能,但是这些事件是“xxxx秒”的形式出现的,需要我们根据“时秒分”的关系去进行换算。


注:其实PLR重装载寄存器的值可以是[0,2^20-1]之间所有的数值,因此我们也可以设定更小的计数单位进行计数。


为什么读数据/命令时需要等待RSF(时钟同步标志位)置1,而写命令/数据时则不用?

RTC内核完全独立于APB1接口,软件通过APB1接口对RTC相关寄存器访问。但是相关寄存器只在RTC APB1时钟进行重新同步的RTC时钟的上升沿被更新。所以软件必须先等待寄存器同步标志位(RTC_CRL的RSF位)被硬件置1才读。


我们要读取数据就读取寄存器当前值,因此我们必须等待RTC时钟的上升沿在将数据读取到APB1总线中去,而写操作不同,我们不需要读取任何RTC寄存器的信息,因此写操作没必要等待时钟同步。


APB1总线时钟与RTC时钟同步是什么意思?

由于时钟源不同,因此APB1总线时钟不可能与RTC时钟完全重合,我们读取的原理如下:

我们只需要在下一个RTC时钟上升沿到来之前将RTC寄存器中的数据读取到APB1总线上即可以实现“数据同步读取”。


RTC如何实现日历功能?

要实现日历功能首先需要具备两个条件:间隔相同的计数单位(计数器+1所需时间)+初始计数时间(计数器的初始值)。


例如:我要从计数器=10000时开始计数并且我们计数器+1的时间为1s,如果我们一年之后计数器的值=36000,我们可以得知RTC实时时钟连续计数了26000*1s=26000s。


LSE时钟被旁路是什么意思?


所谓旁路模式,是指无需上面提到的使用外部晶体时所需的芯片内部时钟驱动组件,直接从外界导入时钟信号,犹如芯片内部的驱动组件被旁路了。


”晶振/时钟被旁路“ 是指将芯片内部的用于外部晶体起振和功率驱动等的部分电路和XTAL_OUT引脚断开,这时使用的外部时钟是有源时钟或者其他STM32提供的CCO输出等时钟信号,直接单线从XTAL_IN输入,这样即使外部有晶体也震荡不起来了。


RTC固件库库函数解析image.png

image.png


RTC时钟源配置函数

image.png

RTC备份区域(BKP)操作函数

image.png

BKP备份寄存器

备份寄存器是 42 个 16 位的寄存器(战舰开发板就是大容量的),可用来存储 84 个字节的 用户应用程序数据。他们处在备份域里,当 VDD 电源被切断,他们仍然由 VBAT 维持供电。 即使系统在待机模式下被唤醒,或系统复位或电源复位时,他们也不会被复位。


备份区域(BKP_CR)控制寄存器

注释的意思是“当我们需要失能入侵事件时,我们只需使得TPE=0即可“。


备份区域状态寄存器

备份数据(BKP_DR)寄存器

备份控制/状态寄存器(BKP_CSR)

备份控制寄存器(BKP_CR)

注释的意思是说“当我们想要关闭侵入检测引脚时,我们只将TPE位置0就OK了”。

图片大意如下:


① TPAL=0时,低电平和下降沿脉冲都可以充当入侵信号的事件;


② TPAL=1时,高电平和上升沿脉冲都可以充当入侵信号的事件。


RTC时钟校准寄存器(BKP_RTCCR) 


 

RTC校准有两种方式,分别在“用ppm值校准”和“定时器校准”,这两种方式分别在AN2604.pdf,AN2821.pdf被提及。


按照AN2604.pdf描述的原理,RTC 的校准值应在0-127之间,可实现的校准误差对应为0-121ppm,相当于每30天跑快的秒数为0-314s。


Ppm值计算公式:ppm误差=偏差/基准值*10^6。


备份数据寄存器x(BKP_DRx) (x = 1 … 10)



注意:这里的复位方式“是通过PC13(TAMPER)引脚进行后备区域BKP复位的”。


侵入事件检测引脚

注:此引脚高电平不得超过3.3V。


RTC复位后,如何对后备区域进行操作?

复位后,对备份寄存器和RTC的访问被禁止,并且备份域被保护以防止可能存在的意外的写操作。执行以下操作可以使能对备份寄存器和RTC的访问:


① 通过设置寄存器RCC_APB1ENR的PWREN和BKPEN位来打开电源和后备接口的时钟;


② 电源控制寄存器(PWR_CR)的DBP位来使能对后备寄存器和RTC的访问。


关于BKP备份寄存器的疑难问题解析?

STM32的入侵检测是干什么用的?

你的数据是保存在RAM里的;但是一掉电RAM里的数据就没了;有一块地方,后备电池相关的一块RAM的数据却放不掉(除非电池没电了);还有一个方法可以自动清掉这一部分RAM(寄存器组)这就是入侵事件。


后备存储区BKP有什么用?

你的系统上电后你输入一个密码;这个密码就保存在后备寄存器组中;只要电池有电,这个密码一直保存完好;你的系统每次开机后检测这个密码是否正确,如果不正确说明有两种可能发生的事情:“电池没电了”或者“后备存储区坏掉了“。


事件标志位与中断标志位的区别?

在STM32中“中断标志位“置位的条件是“事件标志位置位+中断允许标志位置位“。我们要知道,当符合中断的条件全部具备,中断触发后,我们一定要清除“中断标志位与事件标志位”这两个位,与单纯的清除事件标志位不同。


#define ADC_IT_EOC                                 ((uint16_t)0x0220)  

#define ADC_IT_AWD                                 ((uint16_t)0x0140)  

#define ADC_IT_JEOC                                ((uint16_t)0x0480)  

 


这是定义的中断位,可以产生中断:


#define ADC_FLAG_AWD                               ((uint8_t)0x01)  

#define ADC_FLAG_EOC                               ((uint8_t)0x02)  

#define ADC_FLAG_JEOC                              ((uint8_t)0x04)  

#define ADC_FLAG_JSTRT                             ((uint8_t)0x08)  

#define ADC_FLAG_STRT                              ((uint8_t)0x10)  

 


这是定义的标志位,二者对比可以发现有的标志位不能产生中断,此外,中断标志位置位包括“事件标志位置位+中断标志位置位”。


RTC输出时钟校准原理?

计算ppm误差,ppm代表比例误差,ppm是百万分之一的意思。


例如,当距离为1公里的时候,比例误差为5mm。 对于一台测距精度为(5+5ppm*D)mm的全站仪或者测距仪,当被测量距离为1公里时,仪器的测距精度为5mm+5ppm*1(公里)=10mm。


为方便测量,RTC时钟可以经64分频输出到侵入检测引脚TAMPER上。通过设置RTC校验寄存 器(BKP_RTCCR)的CCO位来开启这一功能。RTC时钟经过64分频输出到PC13(TAMPER)引脚上的时钟为32767Hz/64=511.968Hz(RTC时钟源为32768Hz),但是如果实测TAMPER引脚输出的频率为511.982Hz,那么RTC对输出时钟进行如下修正:


(511.982Hz-511.968Hz)/ 511.968Hz *10^6 = 27.35ppm,则误差为27.35ppm,我们可以查询AN2604.pdf,可以得知此时我们选择28ppm;


2^20个时钟延误1个时钟所造成的ppm值计算

AN2604.pdf中说,若校准值为1,则RTC 校准时,每2的20次方个时钟周期扣除1个时钟脉冲。这相当于0.954ppm(1/2^20*10^6 = 0.954)。而校准值最大为127,所以最大可以减慢121ppm(0.954ppm*127 = 121)。所以这个校准表就是由简单的乘除运算得来的,当然要使用浮点运算才可以得到准确结果。


由此,我们可以计算出28ppm对应的2^20个周期中延误周期的数量为


BKP后备区域的功能预览

① 20字节数据后备寄存器(中容量和小容量产品),或84字节数据后备寄存器(大容量和互联型产品) ;


② 用来管理防侵入检测并具有中断功能的状态/控制寄存器;


③ 用来存储RTC校验值的校验寄存器;


④ 在PC13引脚(当该引脚不用于侵入检测时)上输出RTC校准时钟,RTC闹钟脉冲或者秒脉冲。


BKP固件库函数解析

image.png

image.png

BKP_DeInit复位函数的作用

 


外设时钟使能,复位外设的总线时钟,再清除复位外设的总线时钟,可以继续配置(读写)外设,就如同如下所述:


RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); // 外设时钟使能

 

RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, ENABLE);  // 复位外设的总线时钟

  

RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, DISABLE); // 清除复位外设的总线时钟

  

USART_Init(USART1, &USART_InitStructure); // 重新初始化

 

RTC完整代码展示

Rtc.c

#include "rtc.h"  

#include "usart.h"  

#include "delay.h"  

#include "stm32f10x.h"  

  

_calendar_obj calendar;//时钟结构体   

  

u8 RTC_initConfig()  

{  

    u8 temp = 0;  

    NVIC_InitTypeDef NVIC_InitStructure;  

      

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP|RCC_APB1Periph_PWR, ENABLE); // 使能APB1总线上的BKP与PWR的时钟  

    PWR_BackupAccessCmd(ENABLE); // 取消后备区域写保护  

    delay_init(); // delay函数初始化  

      

    NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;  

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;  

    NVIC_Init(&NVIC_InitStructure); // 配置RTC的NVIC中断通道  

      

    if(BKP_ReadBackupRegister(BKP_DR1) == 0x5050) // 首次执行程序段  

    {  

        BKP_DeInit(); // BKP外设时钟复位  

        RCC_LSEConfig(RCC_LSE_ON); // LSE低速时钟使能  

          

        while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET && temp < 250)  

        {  

            temp++;  

            delay_ms(10);  

        }  

        if(temp>=250) return 1;  

        RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);  

        RCC_RTCCLKCmd(ENABLE);  

          

        RTC_WaitForLastTask(); // 等待RTC操作完成  

        RTC_WaitForSynchro(); // 等待APB1与RTC时钟同步  

          

        RTC_EnterConfigMode(); // 进入RTC配置模式  

[1] [2] [3] [4]
关键字:STM32  RTC  实时时钟 引用地址:基于STM32的RTC实时时钟实验

上一篇:基于STM32战舰V3开发板的“待机低功耗唤醒实验”
下一篇:基于STM32战舰开发板的USMART调试组件的使用

推荐阅读最新更新时间:2024-11-10 17:43

STM32嵌入式显示器:首款搭载 STM32H7 的高清屏幕
STM32嵌入式显示器:首款搭载 STM32H7 的高清屏幕,可为不同尺寸的屏幕提供漂亮的GUI图显 TouchGFX开发框架的实践者Riverdi 公司在最近的 Display Week显示周活动上展示了其STM32 嵌入式显示器产品线。该产品是一块1280 x 800 分辨率、800 尼特亮度的10.1 英寸IPS 显示屏搭配一块 STM32H7电路板。Riverdi 显示器支持TouchGFX Designer开发环境,开发人员可以直接在这个软件上开发自己的图形用户界面。该公司还为开发者提供非真空半贴合触屏、触控面板和安装框架选择,工程师可以根据各自的需求定制显示器配置,优化价格。此外,Riverdi 是一家为数不
[单片机]
<font color='red'>STM32</font>嵌入式显示器:首款搭载 STM32H7 的高清屏幕
stm32 i2c通信 [操作寄存器+库函数]
I2C总线是由NXP(原PHILIPS)公司设计,有十分简洁的物理层定义,其特性如下: 只要求两条总线线路:一条串行数据线SDA,一条串行时钟线SCL; 每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机关系软件设定地址,主机可以作为主机发送器或主机接收器; 它是一个真正的多主机总线,如果两个或更多主机同时初始化,数据传输可以通过冲突检测和仲裁防止数据被破坏; 串行的8 位双向数据传输位速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s; 连接到相同总线的IC 数量只受到总线的最大电容400pF 限制。 其典型的接口连线如下: I2C的协议
[单片机]
STM32 DHT11串口打印源程序
1.硬件准备: USB转TTL工具一个 核心板STM32F103C8T6 DHT11传感器 2.软件准备: 串口调试助手 2.硬件连线 USB转TTL的RX----32板子上的PA9 USB转TTL的TX----32板子上的PA10 DHT11的DAT连接PB14 3.程序源码 #include dht11.h ////////////////////////////////////////////////////////////////////////////////// #include delay.h //////////////////////////////////////////////////////
[单片机]
<font color='red'>STM32</font> DHT11串口打印源程序
STM32串行通信USART讲解笔记
dragon12345666的专栏 目录视图 摘要视图 订阅 异步赠书:Kotlin领衔10本好书 SDCC 2017之区块链技术实战线上峰会 程序员8月书讯 每周荐书:Java Web、Python极客编程(评论送书) STM32串行通信USART讲解笔记 标签: 中南赵小龙 STM32 串行通信 USART1 2014-04-25 16:58 2741人阅读 评论 (0) 收藏 举报 分类: STM32 学习(9) 版权声明:本文为博主原创文章,未经博主允许不得转载。 目录 (?) STM32串行通信USART程序例举链接:http://blog.csdn.ne
[单片机]
<font color='red'>STM32</font>串行通信USART讲解笔记
S3C6410裸机RTC实时时钟
相对于STM32,6410的RTC是相当的简单. /*************************************************************************************************************   * 文件名: RTC.c   * 功能:      S3C6410 RTC底层驱动函数   * 作者:      cp1300@139.com   * 创建时间:    2012年3月28日21:52   * 最后修改时间:2012年3月28日   * 详细:      RTC相关底层驱动函数  **********************
[单片机]
STM32初学笔记1之RCC(上)
我参考了STM32的标准外设库中的RCC例程,然后对其在原有的基础上做了一定的修改,单独添加到了RCC_ClkConfig.C和RCC_ClkConfig.H两个文件当中,把这个作为以后系统时钟配置的通用函数,在这里共享出来,示例代码如下: ////////////////////////////////////////////////////////////////////////////////////////////////////// RCC_ClkConfig.C /////////////////////////////////////////////////////////
[单片机]
STM32--MDK固件库配置
STM32--MDK固件库配置
[单片机]
STM32--MDK固件库配置
STM32 CAN 波特率的确定
先看两份资料: (1),STM32 得到500Kb/s的波特率 CAN_InitStructure.CAN_SJW=CAN_SJW_1tq; CAN_InitStructure.CAN_BS1=CAN_BS1_8tq; CAN_InitStructure.CAN_BS2=CAN_BS2_7tq; CAN_InitStructure.CAN_Prescaler=1; 每一位的Tq数目 = 1 (固定SYNC_SEG) + 8 (BS1) + 7 (BS2) = 16 如果CAN时钟是 8 MHz : (8M / 1 ) / 16 = 500K 其中: 1 为分频系数 16 为每一位的Tq数目 为了设置为 100K,
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved