首页 > 其他分享 >STM32笔记(2)时钟源 NOP延时

STM32笔记(2)时钟源 NOP延时

时间:2023-07-13 10:14:35浏览次数:63  
标签:__ CFGR NOP STM32 延时 时钟 nop uint32 RCC

时钟
用哪个外设就要开他对应的时钟

例子:RCC->APB2ENR |=(0x01<<3);//时钟
需要在APB2上开启对应的时钟
image
image

image

拓展:系统时钟如何配置


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

/* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------/
/
使能外部高速晶振 */
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配置
/
Enable Prefetch Buffer /
FLASH->ACR |= FLASH_ACR_PRFTBE;
/
Flash 2 wait state /
FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2;
/
HCLK = SYSCLK /
RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
/
PCLK2 = HCLK /
RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
/
PCLK1 = HCLK /
RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;
/
配置PLL时钟的倍频 /
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |
RCC_CFGR_PLLMULL));
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);
/
开启PLL时钟 /
RCC->CR |= RCC_CR_PLLON;
/
等待PLL时钟开启 /
while((RCC->CR & RCC_CR_PLLRDY) == 0)
{
}
/
选择PLL作为系统时钟 /
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
{ /
If HSE fails to start-up, the application will have wrong clock
configuration. User can add here some code to deal with this error */
}
}


单片机如何实现延时?
NOP延时:空指令,在执行这个指令的时候,单片机啥也不干,等待一个时钟周期
单片机主频72Mhz
1个nop等待 1/72000000 秒 1/72000 ms 1/72us


define delay_1us() __nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();#define delay_1us() __nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();
__nop();__nop();

void delay_us(uint32_t time)
{
while(time--)
{
delay_1us();
}
}
void delay_ms(uint32_t time)
{
while(time--)
{
delay_us(1000);
}
}


ST公司,为了降低功耗,默认外设的时钟是关闭的,需要使用外设时,第一步就是要先开启这个时钟

标签:__,CFGR,NOP,STM32,延时,时钟,nop,uint32,RCC
From: https://www.cnblogs.com/lmkjava/p/17549572.html

相关文章

  • STM32笔记 晶振 GPIO 寄存器
    晶振:在各种电路中,产生震荡频率的元器件(频率越高,单片机运行的速度越快)。2个外部:通过晶振高速:HSE--4~16MHz(咱们使用8MHz)--整个单片机提供时钟低速:LSE--32.768KHz--RTC提供(实时时钟)2个内部:通过RC振荡电路高速:HSI--8MHz低速:LSI--40KHz--看门狗定时器GPIO:管......
  • mybatis的延时加载
    https://www.bilibili.com/video/BV1V24y1V7aJ/?spm_id_from=333.337.search-card.all.click&vd_source=46d50b5d646b50dcb2a208d3946b1598https://www.bilibili.com/video/BV1Tb4y1p7rh/?spm_id_from=333.337.search-card.all.click&vd_source=46d50b5d646b50dcb2a2......
  • stm32cubemx
    一、STM32CubeMX是干嘛的?STM32CubeMX是ST意法半导体近几年来大力推荐的STM32芯片图形化配置工具,目的就是为了方便开发者,允许用户使用图形化向导生成C初始化代码,可以大大减轻开发工作,时间和费用,提高开发效率。STM32CubeMX几乎覆盖了STM32全系列芯片。二、如何安装STM32Cu......
  • STM32:rtthread_f1移植
    本文开始移植rtthread的代码到正点原子的板子上;参考资料为野火的教程,需要搭配野火教程使用;使用源码是作为pack包放在arm-keil官网下载的nano3.0.3版本;nano版本精简方便解构;gittee上的master版本组件又多又杂不利于初学;本来想用3.1.5版本源码的,但是移植过程会有代码报错又莫名其......
  • [STM32]STM32双机串口通信
    [STM32]STM32双机串口通信上一篇的通信方案在发送端高强度通信下寄了,发现是函数HAL_UART_Transmit()的锅,一个函数居然能跑0.3s左右。。。于是打算选用DMA收发数据,但是DMA在接收数据时遇到一些玄学问题,于是改用DMA发送数据,串口IDLE中断接收数据的策略。cubeMX配置接收端部分开......
  • [STM32 HAL]一种可能不错的DMA处理串口数据方案
    [STM32HAL]一种可能不错的DMA处理数据方案原文链接:https://blog.csdn.net/youmeichifan/article/details/51750435?spm=1001.2014.3001.5506本文配置稍有不同,大体类似。MX配置开启USART1,使能USART1全局中断,打开RX,TX的DMA通道,均为normal模式,内存地址自增,使能TX对应DMA的中断,RX......
  • [STM32]STM32双机蓝牙串口通信
    [STM32]STM32双机蓝牙串口通信期末考完力,虽然GPA--,但也终于有空搓一搓32了蓝牙模块配置我们先配置蓝牙模块,需要主从兼容,配置过程可以参考这个博客:https://blog.csdn.net/m0_59113542/article/details/122028037?spm=1001.2014.3001.5506cubeMX配置然后就是MX里的配置。PS:两......
  • 使用STM32的usb虚拟串口CDC_Transmit_FS打印freertos的任务列表vTaskList
    创建一个任务,打印信息后,把自己删除/*USERCODEENDHeader_func_showSysInfo*/voidfunc_showSysInfo(voidconst*argument){/*USERCODEBEGINfunc_showSysInfo*//*Infiniteloop*/for(;;){osDelay(1000);chartaskList[200];......
  • stm32芯片焊接区分第一脚
    辨认引脚:芯片的第一脚,正放芯片,面对型号字符,然后,在芯片的左下方为第一脚。也可以把芯片的缺口朝左放置,左下角也就是第一脚了。许多厂家会在第一脚旁边打上一个小圆点作为标记。知道了第一脚之后,按照反时针方向去走,依次是第2至第40引脚。(1脚与40脚遥遥相对)。 两个圆点......
  • STM32IO口模拟IIC时序
    正点原子IIC讲解:https://www.bilibili.com/video/BV1o8411n7o9/?spm_id_from=333.337.search-card.all.click&vd_source=e35b16eeaf19ae2b23ff9587a735ee20一、IIC总线1.物理层(1)支持多设备,一个IIC通讯总线中可以连接多个IIC设备,支持多个通讯主机及多个通讯从机;(2)两条线:双......