千家信息网

晶振对stm32串口数据传输的影响是什么

发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,本篇内容介绍了"晶振对stm32串口数据传输的影响是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成
千家信息网最后更新 2025年02月03日晶振对stm32串口数据传输的影响是什么

本篇内容介绍了"晶振对stm32串口数据传输的影响是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一般stm32 外部晶振是8M的,但是如果你要改外部晶振的话,需要把配置文件也改下

如图位置,把8000000改为 16000000;

图3 系统时钟配置

修改SetSysClockTo72(void)文件如下:

static void SetSysClockTo72(void)
{
__IO uint32_t StartUpCounter = 0, HSEStatus =0;



RCC->CR |= ((uint32_t)RCC_CR_HSEON);


do
{
HSEStatus =RCC->CR & RCC_CR_HSERDY;
StartUpCounter++;
} while((HSEStatus == 0) &&(StartUpCounter != HSE_STARTUP_TIMEOUT));
if ((RCC->CR & RCC_CR_HSERDY) !=RESET)
{
HSEStatus =(uint32_t)0x01;
}
else
{
HSEStatus =(uint32_t)0x00;
}
if (HSEStatus == (uint32_t)0x01)
{

FLASH->ACR |= FLASH_ACR_PRFTBE;

FLASH->ACR &=(uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
FLASH->ACR |=(uint32_t)FLASH_ACR_LATENCY_2;


RCC->CFGR|= (uint32_t)RCC_CFGR_HPRE_DIV1;


RCC->CFGR|= (uint32_t)RCC_CFGR_PPRE2_DIV1;


RCC->CFGR|= (uint32_t)RCC_CFGR_PPRE1_DIV2;
#ifdef STM32F10X_CL




RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 |RCC_CFGR2_PLL2MUL |
RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);
RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 |RCC_CFGR2_PLL2MUL8 |
RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5);


RCC->CR|= RCC_CR_PLL2ON;

while((RCC->CR & RCC_CR_PLL2RDY) == 0)
{
}

RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC| RCC_CFGR_PLLMULL);
RCC->CFGR|= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1|
RCC_CFGR_PLLMULL9);
#else

//16MHZ2分频如下改动,添加RCC_CFGR_PLLXTPRE_HSE_Div2
RCC->CFGR&= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE|
RCC_CFGR_PLLXTPRE_HSE_Div2|RCC_CFGR_PLLMULL));
RCC->CFGR|= (uint32_t)(RCC_CFGR_PLLXTPRE_HSE_Div2 | RCC_CFGR_PLLSRC_HSE |RCC_CFGR_PLLMULL9);
#endif

RCC->CR|= RCC_CR_PLLON;

while((RCC->CR & RCC_CR_PLLRDY) == 0)
{
}


RCC->CFGR&= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
RCC->CFGR|=(uint32_t)RCC_CFGR_SW_PLL;

while((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) !=(uint32_t)0x08)
{
}
}
else
{
}
}

如果用的keil 还要改下target里的 xtal 为16Mhz

以上只是针对于无源晶振,然而对于有源晶振,接法和无源晶振是不一样的,有源晶振由外部发送脉冲信号,通过oscin输入,oscout悬空,此时,在启动文件system_stm32f0xx.c中,在SetSysClock函数中,加上

/*Disable HSI*/

RCC->CR |= ((uint32_t)RCC_CR_HSEBYP);

/* Enable HSE */

RCC->CR |= ((uint32_t)RCC_CR_HSEON);

顺序一定不要搞错,就可以了

HSEBYP是把 HSI旁路,手册上说的被旁路,不是外部晶振失能,而是内部晶振失能,所以HSEBYP置1表示失能HSE,失能HSI

有源晶振一般比无源晶振贵,优点是输出波形完美,不受寄生电容干扰,缺点是输出频率不可调,无源晶振一般比芯片内部晶振效果好十倍,由内部脉冲触发

"晶振对stm32串口数据传输的影响是什么"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

0