话不多说 先上代码!代码里面带有备注。

#include "rcc.h"/*
函数功能:配置时钟
函数参数:无
函数返回值:无
函数描述:时钟源为HSE,系统时钟为168MHZ,其它时钟为最大值
*/
void Config_SystemClock(uint32_t PLLM, uint32_t PLLN, uint32_t PLLP, uint32_t PLLQ)
{RCC_DeInit();  //让所有RCC时钟为缺省值等待我们配置RCC_HSEConfig(RCC_HSE_ON);  //让HSE作为时钟源 RCC_HSICmd(DISABLE);    //让HSI不使能 有HSE就够了 一个时钟源if(RCC_WaitForHSEStartUp() == SUCCESS) //等待HSE起振 {RCC_ClockSecuritySystemCmd(ENABLE);  //时钟安全系统使能  时钟监测器将在 HSE 振荡器就绪时由硬件使能,并在检出振荡器故障时由硬件禁止RCC_PLLConfig(RCC_PLLSource_HSE,PLLM,PLLN,PLLP,PLLQ); //配置PLL系统时钟 让HSE作为系统时钟源RCC_PLLCmd(ENABLE);  //使能RCC_HCLKConfig(RCC_SYSCLK_Div1);    //高速总线不分频RCC_PCLK1Config(RCC_HCLK_Div4);        //APB1总线 48MHZ  最大频率RCC_PCLK2Config(RCC_HCLK_Div2);     //APB2总线 84HZ;  最大频率while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);  //这一步是关键等待PLL就绪 等于SET时就是锁住了 可以用PLL作为系统时钟了RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);  //确定PLL作为系统时钟}
}

代码里面APB1和APB2设定为最大频率了,如下图网上找到的。

第一张图里面的while语句是为了等待HSE振荡器就绪,就绪了才能工作。 不就绪设定的频率就不生效了或者说有毛病了。

图上红色部分是修改过的寄存器,红色打勾的是使用的, ×的是禁止使用的,HSI时钟源 我禁止了,其它的未配置用到的时候再配置。

位带操作的思想 记住一条公式:(外设和SRAM都适用)

*(volatile uint32_t *)((0x40021414 & 0xf0000000) + 0x2000000 + ((0x40021414 &0xfffff) << 5) + (9 << 2)) = 0;

更新一下:

#define BITBAND(addr,bit) ((addr & 0xF0000000)+0x2000000+((addr&0xFFFFF)<<5)+(bit<<2); 这一条公式更好理解更好记住。

更新完毕

这里是把PF9 置 0 ;

右望左看 volatile 易变的,在这里要不要都可以,使用位操作时通常都是使用频率高的变量,需要快速反应。volatile说明不让编译器优化,多线程中该类型常用。

0x40021414是 GPIOF中ODR寄存器的地址。

0xf0000000  、  0x2000000 、 0xfffff 、5 、 2是公式上固定的值不需要改变。

9 是代表 寄存器地址对应的哪个位。

等号右边的0 是 把该位置零

下图便于理解

以上内容为博主学习的笔记,很多都是个人理解加网上摘录,主要是以后用到了这些内容能快速找到。

STM32F407系统标准库函数之时钟配置 和 位带操作相关推荐

  1. 【STM32】标准库与HAL库对照学习教程六--位带操作

    [STM32]标准库与HAL库对照学习教程六--位带操作 一.前言 二.准备工作 三.位带介绍 1.位带操作 2.STM32位带及位带别名区域 四.位带区与位带别名区地址转换 五.GPIO的位带操作 ...

  2. SAP系统标准销售业务流程及配置内容

    目录 二.实施方案 1.简化型销售-同步创建交货单 ​2.免费订单 3.后续免费交货订单 4.销售订单_库发销售 5.贷项借项凭证请求 6.销售订单-退货 7.跨公司销售 8.第三方销售(Third ...

  3. GD32F405时钟配置

    GD32F405时钟配置 1.时钟控制单元(CCTL) 2.时钟配置 2.1库函数自带时钟配置函数 2.2 用户自编写时钟配置函数 1.时钟控制单元(CCTL)   时钟控制单元提供了一系列频率的时钟 ...

  4. Stm32F04 时钟配置

    时钟配置 1.概述 F407的内部时钟有LSI(32Hz).HSI(16MHz) 外部时钟有 HSE 25MHz,用外部时钟比较稳定. 用HSE时钟配置系统时钟如下 25Mhz,通过PLL倍频,作为P ...

  5. 学习和理解STM32F103系列芯片的地址映射和寄存器映射原理;了解GPIO端口的初始化设置三步骤(时钟配置、输入输出模式设置、最大速率设置)。

    ​​ 目录 一:什么是寄存器 1. 2. 二.程序设计思路 1.GPIO模式 2.存储器空间 3.存储器映射 4.寄存器操作 三.GPIO寄存器 STM32 GPIO口的工作模式: 四.总结: ​​​ ...

  6. 第五章 国产MCU 雅特力AT32F403A 基于v2库的点灯实验,位带操作控制,库函数控制

    目录 概述 硬件 软件 初始化gpio 相关代码: 库函数操作 相关代码: 位带操作 相关代码: 最后 概述 本文主要是使用AT32F403A开发板,基于V2库的点灯程序. 工程建立.调试工具配置在前 ...

  7. DSP28377s系统时钟配置注意事项

    DSP28377s系统时钟配置注意事项 问题一脸嫣然的向我们走来... 近日,一个兄弟在配置基于28377s芯片的主控系统时钟时,遇到点困难. 具体是这样的,原来的主控板使用的是20MHz外部晶振,为 ...

  8. Cubemx与HAL库系列教程|系统时钟配置详解及源码分析

    STM32时钟系统简介 STM32种类繁多,时钟系统也不尽相同,但基本的还是大差不差,今日小飞哥就F1系列的MCU简单聊一聊STM32的时钟系统 1.时钟种类介绍: 先来看一看时钟树图,包含了整个系统 ...

  9. MSP430F5529 DriverLib 库函数学习笔记(一)时钟配置和闪烁LED

    目录 一.新建工程 二.时钟树 时钟系统结构 时钟系统的原理 时钟树配置实战 三.点灯工程师 封装好的初始化函数 平台:Code Composer Studio 10.3.1 MSP430F5529 ...

最新文章

  1. 数据验证html,JavaScript 表单数据验证
  2. 关于如何开办餐饮店?
  3. Bitmap类getPixels()方法中参数stride理解
  4. 反思浏览器可以postman调试不通:直接从浏览器复制的参数有空格,查询为空
  5. [vue] 在移动端使用vue,你觉得最佳实践有哪些?
  6. 【数学】MORE XOR
  7. DataGridView使用方法汇总
  8. The LLVM Compiler Infrastructure | LLVM编译器基础设施
  9. java安装时无法写入文件_Java - 无法写入第二个文件
  10. liunx apache 的安装
  11. Linux服务器 -- 安全篇
  12. Java反射--实战篇
  13. Java实现的餐厅点餐系统源码Java点餐系统Java点餐系统Java网上订餐系统Java在线订餐系统
  14. java图书馆借书系统三个类_Java入门第三季-异常-图书馆借书系统
  15. matlab的开方算法_区域生长算法(附MATLAB代码实现)
  16. 按键精灵打怪学习-多窗口多线程后台技能
  17. yaw公式_横摆角速度(Yaw Rate)估算(上)
  18. 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合
  19. 【数字IC第一步】Linux系统安装(含常用IC软件)
  20. Linux系统进程查看命令

热门文章

  1. RT-1052学习笔记 - GPIO架构分析
  2. 4.16 广推科技现场面试
  3. unraid应用_套娃自动备份unraid系统u盘_NAS存储
  4. android ram rom测试工具,ROM与RAM的那点事,超详细解说
  5. c语言控制51单片机完成交通信号灯(红绿灯)
  6. vivado ROM IP核简单使用
  7. PDPS软件:3D空间扫描功能介绍与使用方法
  8. Pandoc中使用Reveal-js制作幻灯片
  9. Zookeeper:Zookeeper的主从选举机制
  10. 02—JAVA(基础)—(数据类型转换,运算符,方法)