AT32F415 修改时钟和晶振方法(原创)

  1. 简介

我们几乎是国内第一批使用AT32F415芯片的客户,那个时候芯片还没涨价,岁月一切静好。使用AT32F415 做了几个小产品,也在持续出货。后来大家都知道,涨价缺货愈演愈烈。好在我们提前囤了一批,有惊无险的度过了不平凡的一年。言归正传,把最近遇到的总结一下,库版本更新了,从V1.0 到V2.0 ;芯片版本更新了从B版本到C版本;我们主要是修改晶振,默认的都是8Mhz,但是由于封装限制,想用小尺寸的就必须用频率高的,比如12M的;

2、库版本V1.0修改方法:针对V1.0版本库修改方法如下:在static void SetSysClockTo144M(void);这个函数里面修改,RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLMULT18);

比如都是要144MHz主频,晶体从8M修改到12Mhz,8*18=144Mhz  12*12=144Mhz,因此这句改为:

RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLMULT12);

添加宏定义:HSE_VALUE=12000000

 

 

3、库版本V2.0 修改方法:

V2.0的库默认开启了 输入时钟/2的功能,因此如果是8Mhz 晶体输出144Mhz 则是8*36/2=144Mhz;如果此时需要修改成12Mhz 则需要 12*24/2=144Mhz;

在void system_clock_config(void)函数中修改;

 修改宏定义:HEXT_VALUE=12000000 ;V2.0库改名字了;

 自此修改晶振就介绍结束,如果想要修改频率也可以修改相应的PLL倍数即可;

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据提供的引用内容,STM32F407的SPI时钟速率计算方法如下: 1. 首先,确定SPI的时钟源。STM32F407的SPI可以使用内部时钟源或外部时钟源。如果选择使用外部时钟源,则需要连接外部晶振提供时钟。 2. 然后,设置SPI的分频系数。SPI的时钟速率可以通过分频系数来控制。分频系数可以通过寄存器来设置,具体的寄存器和位域可以参考STM32F407的参考手册。 3. 根据分频系数计算SPI的时钟速率。SPI的时钟速率可以通过以下公式计算: SPI时钟速率 = SPI时钟源频率 / 分频系数 其中,SPI时钟源频率可以是内部时钟源的频率或外部时钟源的频率。 例如,如果SPI时钟源频率为16MHz,分频系数为4,则SPI的时钟速率为4MHz。 注意:SPI的时钟速率不能超过SPI的最高速率,即16MHz。 下面是一个示例代码,演示了如何设置STM32F407的SPI时钟速率: ```c #include "stm32f4xx.h" void SPI_Configuration(void) { // 设置SPI时钟源为外部时钟源 RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2); GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2); GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2); SPI_InitTypeDef SPI_InitStructure; SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; // 设置分频系数为4 SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPI2, &SPI_InitStructure); SPI_Cmd(SPI2, ENABLE); } int main(void) { SPI_Configuration(); // 其他代码... while (1) { // 主循环代码... } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值