STM32F103学习之RCC配置

发布者:RadiantSerenity最新更新时间:2018-12-17 来源: eefocus关键字:STM32F103  RCC配置 手机看文章 扫描二维码
随时随地手机看文章

STM32F103时钟配置


STM32的独立时钟源共有四个:


1.HSE(外部高速时钟,4~16MHz);


2.HSI(内部高速时钟,8MHz,精度不高);


3.LSE(外部低速时钟,32.768kHz,一般用于产生精确秒信号);


4.LSI(内部低速时钟,40kHz);


还有几个衍生的时钟


5.PLLCLK(锁相环时钟,来源可以是 HSE,HSE/2,HSI/2 这三种再进行倍频得到);


6.SYSCLK(系统时钟,来源可以是 HSE,HSI,PLL 这三种);


7.HCLK(AHB总线时钟,由SYSCLK分频得到);


8.PCLK1(APB1低速时钟,最高36MHz,由HCLK分频得到);


9.PCLK2(APB2高速时钟,最高72MHz,由HCLK分频得到);


10.RTCCLK(实时时钟,来源可以是LSI,LSE,HSE/128 这三种);


11.IWDGCLK(独立看门狗时钟,来自LSI);


在使用外设之前,应先使能其各自的时钟!


若使用3.5版本的库函数进行开发,在启动代码(startup_stm32f10x_xx.s)中会默认调用SystemInit()函数(位于文件“system_stm32f10x.c”),如果定义了这个宏(#define SYSCLK_FREQ_72MHz  72000000),则会将时钟系统初始化为如下状态:SYSCLK:72MHz  /  AHB:72MHz  /  PCLK1:36MHz  /  PCLK2:72MHz  /  PLL:72MHz,如此一来便大大简化了编程,只需在设置中预先DEFINE这个宏(SYSCLK_FREQ_72MHz)即可。初始化以后可以通过SystemCoreClock变量来获取系统时钟(SYSCLK)的状态,例如,SYSCLK为72MHz,那么SystemCoreClock的值为72000000。



与时钟配置相关的库函数整理如下:


函数原型:

void RCC_DeInit(void)

函数功能:

将外设RCC寄存器重设为缺省值

输入参数:无

输出参数:无


函数原型:

void RCC_HSEConfig(u32 RCC_HSE)

函数功能:

设置外部高速晶振(HSE)

输入参数:

RCC_HSE: HSE的新状态

RCC_HSE_OFF  HSE晶振OFF

RCC_HSE_ON  HSE晶振ON

RCC_HSE_Bypass  HSE晶振被外部时钟旁路

输出参数:无


函数原型:

ErrorStatus RCC_WaitForHSEStartUp(void)

函数功能:

等待HSE起振,该函数将等待直到HSE就绪,或者在超时的情况下退出

输入参数:无

输出参数:

一个ErrorStatus枚举值:

SUCCESS:HSE晶振稳定且就绪

ERROR:HSE晶振未就绪


函数原型:

void RCC_AdjustHSICalibrationValue(u8 HSICalibrationValue)

函数功能:

调整内部高速晶振(HSI)校准值

输入参数:

HSICalibrationValue: 校准补偿值

该参数取值必须在0到0x1F之间

输出参数:无


函数原型:

void RCC_HSICmd(FunctionalState NewState)

函数功能:

使能或者失能内部高速晶振(HSI)

输入参数:

NewState:HSI新状态

这个参数可以取:ENABLE或者DISABLE

输出参数:无


函数原型:

void RCC_PLLConfig(u32 RCC_PLLSource, u32 RCC_PLLMul)

函数功能:

设置PLL时钟源及倍频系数

输入参数:

RCC_PLLSource:PLL的输入时钟源

RCC_PLLSource_HSI_Div2  PLL的输入时钟 = HSI时钟频率除以2

RCC_PLLSource_HSE_Div1  PLL的输入时钟 = HSE时钟频率

RCC_PLLSource_HSE_Div2  PLL的输入时钟 = HSE 时钟频率除以2

RCC_PLLMul:PLL倍频系数

RCC_PLLMul_2  PLL输入时钟 x 2

RCC_PLLMul_3  PLL输入时钟 x 3

RCC_PLLMul_4  PLL输入时钟 x 4

RCC_PLLMul_5  PLL输入时钟 x 5

RCC_PLLMul_6  PLL输入时钟 x 6

RCC_PLLMul_7  PLL输入时钟 x 7

RCC_PLLMul_8  PLL输入时钟 x 8

RCC_PLLMul_9  PLL输入时钟 x 9

RCC_PLLMul_10  PLL输入时钟 x 10

RCC_PLLMul_11  PLL输入时钟 x 11

RCC_PLLMul_12  PLL输入时钟 x 12

RCC_PLLMul_13  PLL输入时钟 x 13

RCC_PLLMul_14  PLL输入时钟 x 14

RCC_PLLMul_15  PLL输入时钟 x 15

RCC_PLLMul_16  PLL输入时钟 x 16

输出参数:无


函数原型:

void RCC_PLLCmd(FunctionalState NewState)

函数功能:

使能或者失能PLL

输入参数:

NewState:PLL新状态

这个参数可以取:ENABLE或者DISABLE

输出参数:无


函数原型:

void RCC_SYSCLKConfig(u32 RCC_SYSCLKSource)

函数功能:

设置系统时钟(SYSCLK)

输入参数:

RCC_SYSCLKSource: 用作系统时钟的时钟源

RCC_SYSCLKSource_HSI  选择HSI作为系统时钟

RCC_SYSCLKSource_HSE  选择HSE作为系统时钟

RCC_SYSCLKSource_PLLCLK  选择PLL作为系统时钟

输出参数:无


函数原型:

u8 RCC_GetSYSCLKSource(void)

函数功能:

返回用作系统时钟的时钟源

输入参数:无

输出参数:

0x00:HSI作为系统时钟

0x04:HSE作为系统时钟

0x08:PLL作为系统时钟


函数原型:

void RCC_HCLKConfig(u32 RCC_HCLK)

函数功能:

设置AHB时钟(HCLK)

输入参数:

RCC_HCLK: 定义HCLK,该时钟源自系统时钟(SYSCLK)

RCC_SYSCLK_Div1  AHB时钟 = 系统时钟

RCC_SYSCLK_Div2  AHB时钟 = 系统时钟 / 2

RCC_SYSCLK_Div4  AHB时钟 = 系统时钟 / 4

RCC_SYSCLK_Div8  AHB时钟 = 系统时钟 / 8

RCC_SYSCLK_Div16  AHB时钟 = 系统时钟 / 16

RCC_SYSCLK_Div64  AHB时钟 = 系统时钟 / 64

RCC_SYSCLK_Div128  AHB时钟 = 系统时钟 / 128

RCC_SYSCLK_Div256  AHB时钟 = 系统时钟 / 256

RCC_SYSCLK_Div512  AHB时钟 = 系统时钟 / 512

输出参数:无


函数原型:

void RCC_PCLK1Config(u32 RCC_PCLK1)

函数功能:

设置低速AHB时钟(PCLK1)

输入参数:

RCC_PCLK1: 定义PCLK1,该时钟源自AHB时钟(HCLK)

RCC_HCLK_Div1  APB1时钟 = HCLK

RCC_HCLK_Div2  APB1时钟 = HCLK / 2

RCC_HCLK_Div4  APB1时钟 = HCLK / 4

RCC_HCLK_Div8  APB1时钟 = HCLK / 8

RCC_HCLK_Div16  APB1时钟 = HCLK / 16

输出参数:无


函数原型:

void RCC_PCLK2Config(u32 RCC_PCLK2)

函数功能:

设置高速AHB时钟(PCLK2)

输入参数:

RCC_PCLK2: 定义PCLK2,该时钟源自AHB时钟(HCLK)

RCC_HCLK_Div1  APB2时钟 = HCLK

RCC_HCLK_Div2  APB2时钟 = HCLK / 2

RCC_HCLK_Div4  APB2时钟 = HCLK / 4

RCC_HCLK_Div8  APB2时钟 = HCLK / 8

RCC_HCLK_Div16  APB2时钟 = HCLK / 16

输出参数:无


函数原型:

void RCC_ITConfig(u8 RCC_IT, FunctionalState NewState)

函数功能:

使能或者失能指定的RCC中断

输入参数:

RCC_IT:待使能或者失能的RCC中断源

RCC_IT_LSIRDY  LSI就绪中断

RCC_IT_LSERDY  LSE就绪中断

RCC_IT_HSIRDY  HSI就绪中断

RCC_IT_HSERDY  HSE就绪中断

RCC_IT_PLLRDY  PLL就绪中断

NewState:RCC中断的新状态

这个参数可以取:ENABLE或者DISABLE

输出参数:无


函数原型:

void RCC_USBCLKConfig(u32 RCC_USBCLKSource)

函数功能:

设置USB时钟(USBCLK)

输入参数:

RCC_USBCLKSource: 定义USBCLK,该时钟源自PLL输出

RCC_USBCLKSource_PLLCLK_1Div5  USB时钟 = PLL时钟除以1.5

RCC_USBCLKSource_PLLCLK_Div1  USB时钟 = PLL时钟

输出参数:无


函数原型:

void ADC_ADCCLKConfig(u32 RCC_ADCCLKSource)

函数功能:

设置ADC时钟(ADCCLK)

输入参数:

RCC_ADCCLKSource: 定义ADCCLK,该时钟源自APB2时钟

RCC_PCLK2_Div2  ADC时钟 = PCLK / 2

RCC_PCLK2_Div4  ADC时钟 = PCLK / 4

RCC_PCLK2_Div6  ADC时钟 = PCLK / 6

RCC_PCLK2_Div8  ADC时钟 = PCLK / 8

输出参数:无


函数原型:

void RCC_LSEConfig(u32 RCC_HSE)

函数功能:

设置外部低速晶振(LSE)

输入参数:

RCC_LSE: LSE的新状态

RCC_LSE_OFF  LSE晶振OFF

RCC_LSE_ON  LSE晶振ON

RCC_LSE_Bypass  LSE晶振被外部时钟旁路

输出参数:无


函数原型:

void RCC_LSICmd(FunctionalState NewState)

函数功能:

使能或者失能内部低速晶振(LSI)

输入参数:

NewState:LSI新状态

这个参数可以取:ENABLE或者DISABLE

输出参数:无


函数原型:

void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks)

函数功能:

返回不同片上时钟的频率

输入参数:

RCC_Clocks:指向结构RCC_ClocksTypeDef的指针,包含了各个时钟的频率

RCC_ClocksTypeDef structure

RCC_ClocksTypeDef定义于文件“stm32f10x_rcc.h”:

typedef struct

{

u32 SYSCLK_Frequency;

u32 HCLK_Frequency;

u32 PCLK1_Frequency;

u32 PCLK2_Frequency;

u32 ADCCLK_Frequency;

}RCC_ClocksTypeDef;

SYSCLK_Frequency  该成员返回SYSCLK的频率,单位 Hz

HCLK_Frequency  该成员返回HCLK的频率,单位 Hz

PCLK1_Frequency  该成员返回PCLK1的频率,单位 Hz

PCLK2_Frequency  该成员返回PCLK2的频率,单位 Hz

ADCCLK_Frequency  该成员返回ADCCLK的频率,单位 Hz

输出参数:无


函数原型:

void RCC_AHBPeriphClockCmd(u32 RCC_AHBPeriph,FunctionalState NewState)

函数功能:

使能或者失能AHB外设时钟

输入参数:

RCC_AHBPeriph: 门控AHB外设时钟

RCC_AHBPeriph_DMA  DMA时钟

RCC_AHBPeriph_SRAM  SRAM时钟

RCC_AHBPeriph_FLITF  FLITF时钟

NewState:指定外设时钟的新状态

这个参数可以取:ENABLE或者DISABLE

输出参数:无


函数原型:

void RCC_APB2PeriphClockCmd(u32 RCC_APB2Periph,

FunctionalState NewState)

函数功能:

使能或者失能APB2外设时钟

输入参数:

RCC_APB2Periph: 门控APB2外设时钟

RCC_APB2Periph_AFIO  功能复用IO时钟

RCC_APB2Periph_GPIOA  GPIOA时钟

RCC_APB2Periph_GPIOB  GPIOB时钟

RCC_APB2Periph_GPIOC  GPIOC时钟

RCC_APB2Periph_GPIOD  GPIOD时钟

RCC_APB2Periph_GPIOE  GPIOE时钟

RCC_APB2Periph_ADC1  ADC1时钟

RCC_APB2Periph_ADC2  ADC2时钟

RCC_APB2Periph_TIM1  TIM1时钟

RCC_APB2Periph_SPI1  SPI1时钟

RCC_APB2Periph_USART1  USART1时钟

RCC_APB2Periph_ALL  全部APB2外设时钟

NewState:指定外设时钟的新状态

这个参数可以取:ENABLE或者DISABLE

输出参数:无


函数原型:

void RCC_APB1PeriphClockCmd(u32 RCC_APB1Periph, FunctionalState NewState)

函数功能:

使能或者失能APB1外设时钟

输入参数:

RCC_APB1Periph: 门控APB1外设时钟

RCC_APB1Periph_TIM2  TIM2时钟

RCC_APB1Periph_TIM3  TIM3时钟

RCC_APB1Periph_TIM4  TIM4时钟

RCC_APB1Periph_WWDG  WWDG时钟

RCC_APB1Periph_SPI2  SPI2时钟

RCC_APB1Periph_USART2  USART2时钟

RCC_APB1Periph_USART3  USART3时钟

RCC_APB1Periph_I2C1  I2C1时钟

RCC_APB1Periph_I2C2  I2C2时钟

RCC_APB1Periph_USB  USB时钟

RCC_APB1Periph_CAN  CAN时钟

RCC_APB1Periph_BKP  BKP时钟

RCC_APB1Periph_PWR  PWR时钟

RCC_APB1Periph_ALL  全部APB1外设时钟

NewState:指定外设时钟的新状态

这个参数可以取:ENABLE或者DISABLE

输出参数:无


函数原型:

void RCC_APB2PeriphResetCmd(u32 RCC_APB2Periph, FunctionalState NewState)

函数功能:

强制或者释放高速APB(APB2)外设复位

输入参数:

RCC_APB2Periph: APB2外设复位

RCC_APB2Periph_AFIO  功能复用IO时钟

RCC_APB2Periph_GPIOA  GPIOA时钟

RCC_APB2Periph_GPIOB  GPIOB时钟

RCC_APB2Periph_GPIOC  GPIOC时钟

RCC_APB2Periph_GPIOD  GPIOD时钟

RCC_APB2Periph_GPIOE  GPIOE时钟

RCC_APB2Periph_ADC1  ADC1时钟

RCC_APB2Periph_ADC2  ADC2时钟

RCC_APB2Periph_TIM1  TIM1时钟

RCC_APB2Periph_SPI1  SPI1时钟

RCC_APB2Periph_USART1  USART1时钟

RCC_APB2Periph_ALL  全部APB2外设时钟

NewState:指定APB2外设复位的新状态

这个参数可以取:ENABLE或者DISABLE

输出参数:


函数原型:

void RCC_APB1PeriphResetCmd(u32 RCC_APB1Periph, FunctionalState NewState)

函数功能:

强制或者释放低速APB(APB1)外设复位

输入参数:

RCC_APB1Periph: APB1外设复位

RCC_APB1Periph_TIM2  TIM2时钟

RCC_APB1Periph_TIM3  TIM3时钟

RCC_APB1Periph_TIM4  TIM4时钟

RCC_APB1Periph_WWDG  WWDG时钟

RCC_APB1Periph_SPI2  SPI2时钟

RCC_APB1Periph_USART2  USART2时钟

RCC_APB1Periph_USART3  USART3时钟

RCC_APB1Periph_I2C1  I2C1时钟

RCC_APB1Periph_I2C2  I2C2时钟

RCC_APB1Periph_USB  USB时钟

RCC_APB1Periph_CAN  CAN时钟

RCC_APB1Periph_BKP  BKP时钟

RCC_APB1Periph_PWR  PWR时钟

RCC_APB1Periph_ALL  全部APB1外设时钟

NewState:指定APB1外设复位的新状态

这个参数可以取:ENABLE或者DISABLE

输出参数:


函数原型:

void RCC_BackupResetCmd(FunctionalState NewState)

函数功能:

强制或者释放后备域复位

输入参数:

NewState:后备域复位的新状态

这个参数可以取:ENABLE或者DISABLE

输出参数:无


函数原型:

void RCC_ClockSecuritySystemCmd(FunctionalState NewState)

函数功能:

使能或者失能时钟安全系统

输入参数:

NewState:时钟安全系统的新状态

这个参数可以取:ENABLE或者DISABLE

输出参数:无


函数原型:

void RCC_MCOConfig(u8 RCC_MCO)

函数功能:

选择在MCO管脚上输出的时钟源

输入参数:

RCC_MCO: 指定输出的时钟源

RCC_MCO_NoClock  无时钟被选中

RCC_MCO_SYSCLK  选中系统时钟

RCC_MCO_HSI  选中HSI

RCC_MCO_HSE  选中HSE

RCC_MCO_PLLCLK_Div2  选中PLL时钟除以2

输出参数:无


函数原型:

FlagStatus RCC_GetFlagStatus(u8 RCC_FLAG)

函数功能:

检查指定的RCC标志位设置与否

输入参数:

RCC_FLAG:待检查的RCC标志位

RCC_FLAG_HSIRDY  HSI晶振就绪

RCC_FLAG_HSERDY  HSE晶振就绪

RCC_FLAG_PLLRDY  PLL就绪

RCC_FLAG_LSERDY  LSI晶振就绪

RCC_FLAG_LSIRDY  LSE晶振就绪

RCC_FLAG_PINRST  管脚复位

RCC_FLAG_PORRST  POR/PDR复位

RCC_FLAG_SFTRST  软件复位

RCC_FLAG_IWDGRST  IWDG复位

RCC_FLAG_WWDGRST  WWDG复位

RCC_FLAG_LPWRRST  低功耗复位

输出参数:

RCC_FLAG的新状态(SET或者RESET)


函数原型:

void RCC_ClearFlag(void)

函数功能:

清除RCC的复位标志位

输入参数:无

输出参数:无


函数原型:

ITStatus RCC_GetITStatus(u8 RCC_IT)

函数功能:

检查指定的RCC中断发生与否

输入参数:

RCC_IT:待检查的RCC中断源

RCC_IT_LSIRDY  LSI晶振就绪中断

RCC_IT_LSERDY  LSE晶振就绪中断

RCC_IT_HSIRDY  HSI晶振就绪中断

RCC_IT_HSERDY  HSE晶振就绪中断

RCC_IT_PLLRDY  PLL就绪中断

RCC_IT_CSS  时钟安全系统中断

输出参数:

RCC_IT的新状态(SET或者RESET)


函数原型:

void RCC_ClearITPendingBit(u8 RCC_IT)

函数功能:

清除RCC的中断待处理位

输入参数:

RCC_IT:待检查的RCC中断源

RCC_IT_LSIRDY  LSI晶振就绪中断

RCC_IT_LSERDY  LSE晶振就绪中断

RCC_IT_HSIRDY  HSI晶振就绪中断

RCC_IT_HSERDY  HSE晶振就绪中断

RCC_IT_PLLRDY  PLL就绪中断

RCC_IT_CSS  时钟安全系统中断

输出参数:无


关键字:STM32F103  RCC配置 引用地址:STM32F103学习之RCC配置

上一篇:STM32寄存器列表 RCC时钟相关寄存器
下一篇:STM32 串口的基本配置(寄存器版)笔记

推荐阅读最新更新时间:2024-03-16 16:20

STM32F103R6之系统架构
主系统由四个驱动单元和四个被动单元构成。 四个驱动单元: M3内核的Dcode总线(D-bus) 系统总线 通用DMA1 通用DMA2 四个被动单元: 内部SRAM 内部闪存存储器(flash) FSMC AHB到APB的桥 图 1系统结构 ICode总线将Cortex™-M3内核的指令总线与闪存指令接口相连接。指令预取在此总线上完成。 DCode总线将Cortex™-M3内核的DCode总线与闪存存储器的数据接口相连接(常量加载和调试访问)。 系统总线连接Cortex™-M3内核的系统总线(外设总线)到总线矩阵,总线矩阵协调着内核和DMA间的访问。 总线矩阵协调内核系统总线和DMA主控总线之间的访问仲
[单片机]
<font color='red'>STM32F103</font>R6之系统架构
stm32f103学习笔记】字、半字、字节和sizeof()
定义 -字、半字是根据处理器的特性决定的;字节则都是8bit。 -sizeof()返回一个数据类型的占用地址长度,增强程序在不同处理器间的兼容性; CPU按照其处理信息的字长可以分为:八位微处理器、十六位微处理器、三十二位微处理器以及六十四位微处理器等。 CPU最大能查找多大范围的地址叫做寻址能力 ,CPU的寻址能力以字节为单位 ,如32位寻址的CPU可以寻址2的32次方大小的地址也就是4G,这也是为什么32位的CPU最大能搭配4G内存的原因 ,再多的话CPU就找不到了。 几个处理器比较 1)stm32是32bit处理器,所以它的字是32bit的(一次处理4字节长度的数据)。半字自然就是16bit(2字节);字节是8bit
[单片机]
STM32F103学习笔记(六) 独立看门狗and窗口看门狗
首先,学习两种狗,就该看到它们两者之间的不同: (1)独立看门狗由内部专门的 40Khz 低速时钟驱动,而窗口狗使用的是 PCLK1 的时钟,需要先使能时钟,而独立狗不需要使能。 (2)两者的作用不同:1.独立狗 避免单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环, 独立看门狗的作用就是在一定时间内(通过定时计数器实现) 没有接收喂狗信号 (表示 MCU 已经挂了),便实现处理器的自动复位重启(发送复位信号)。2.窗口狗 窗口看门狗( WWDG)通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。 (3)独立狗不用中断,窗口狗要用中断 (4)独立狗需要外部的手动控制(eg按
[单片机]
STM32F103C8T6用官方bootloader实现IAP升级操作方法
在使用STM32F103C8T6单片机IAP功能时,可以自己写bootloader程序,也可以使用官方bootloader文件。下面说一下使用官方bootloader的使用方法。 首先下载官方bootloader文件 目前使用的是这个版本,打开文件夹,选择适合自己编译器的工程。 目前使用的是keil,所以打开MDK-ARM文件夹 打开IAP工程 打开后根据自己的单片机型号,对工程进行简单的修改。用的是STM32F103C8T6单片机,FLASH为64K,SRAM为20K。 设置IROM1的起始地址和大小。 设置引用的头文件,STM32F103C8T6为中等容量,所以设置文件为STM32F10X_MD,。
[单片机]
<font color='red'>STM32F103</font>C8T6用官方bootloader实现IAP升级操作方法
STM32f103C8T6的优势和作用是什么?
对于入门STM32来说,这款单片机还是比较适合的。 早期我学习的时候,有个误区,就是刚入门就喜欢上高配,结果都是没玩到高级功能,开发板就丢在一边吃灰了。 实际产品开发其实很少用开发板那些方案,主要是成本高,尺寸不合适。 新手刚开始接触STM32的时候,不建议学资源太丰富的型号,因为贪多嚼不烂,入门越简单越好。 等你用熟了STM32F103以后,再去用更高级的,会顺手很多。 下面聊下,我自己用STM32F103C8T6的感觉,从几个方面: 1.资料教程丰富 这块相信大家也感同身受了,资料丰富到啥程序? 比如我不知道固件库这个是什么意思? 在网上一搜,一堆答案。 这么细致的问题都有答案,就丰富得很过分。 这样的好处是什么? 就
[单片机]
激光测距VL53LX1 配合STM32F103T8U6测试成功
#include vl53l1x.h #include common.h #include usart.h VL53L1_Dev_t VL53L1_dev ; //device param, include I2C //VL53L1_DeviceInfo_t VL53L1_dev_info ;//device ID version info uint8_t Ajusted ={0,0};//adjusted sign, 0-not, 1-had uint16_t Distance = 0;//保存测距数据 VL53L1_RangingMeasurementData_t VL53L1_data ;//ranging resu
[单片机]
STM32CubeMX开发stm32f103rbt6 CAN例程(二)
1、STM32CubeMX配置 2、生成代码查看 3、编写代码 程序下载:http://download.csdn.net/download/white_loong/10137468 4、使用CAN分析仪测试(波特率125K) 问题: 程序CAN收发同时打开例如: 1、main() { HAL_CAN_Receive_IT(); HAL_CAN_Transmit_IT(); } HAL_CAN_RxCpltCallback() { HAL_CAN_Receive_IT(); // Rearm receive } HAL_CAN_TxC
[单片机]
STM32CubeMX开发<font color='red'>stm32f103</font>rbt6 CAN例程(二)
STM32F103系列USB问题
1. usb和can公用512B的RAM,但是RAm地址为0x40006000-0x40006400,分明为1KB啊,为什么还是说512B. 2. 若PC机读RAM中数据时,我同时对RAM进行写操作,怎么办,我感觉库中并没有对这种操作进行处理啊。 3. 对于缓冲区,不理解为什么给了个地址,又同时给了个USB本地地址,并且我认为,地址偏移应该为 *2+n*16+(0,4,8,12),也就是缓冲区描述表也应该扩大2倍,不知道是不是 4.不理解为什么USB_BTABLE设置成13+3位的,反正一共就512B(我理解为1K),8位就够了 1)这个缓冲区是个双端口RAM,CPU一端是以32位宽访问,而USB一端是以16位宽访问,因此从CPU
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

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