STM32F407系统标准库函数之时钟配置 和 位带操作
话不多说 先上代码!代码里面带有备注。
#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系统标准库函数之时钟配置 和 位带操作相关推荐
- 【STM32】标准库与HAL库对照学习教程六--位带操作
[STM32]标准库与HAL库对照学习教程六--位带操作 一.前言 二.准备工作 三.位带介绍 1.位带操作 2.STM32位带及位带别名区域 四.位带区与位带别名区地址转换 五.GPIO的位带操作 ...
- SAP系统标准销售业务流程及配置内容
目录 二.实施方案 1.简化型销售-同步创建交货单 2.免费订单 3.后续免费交货订单 4.销售订单_库发销售 5.贷项借项凭证请求 6.销售订单-退货 7.跨公司销售 8.第三方销售(Third ...
- GD32F405时钟配置
GD32F405时钟配置 1.时钟控制单元(CCTL) 2.时钟配置 2.1库函数自带时钟配置函数 2.2 用户自编写时钟配置函数 1.时钟控制单元(CCTL) 时钟控制单元提供了一系列频率的时钟 ...
- Stm32F04 时钟配置
时钟配置 1.概述 F407的内部时钟有LSI(32Hz).HSI(16MHz) 外部时钟有 HSE 25MHz,用外部时钟比较稳定. 用HSE时钟配置系统时钟如下 25Mhz,通过PLL倍频,作为P ...
- 学习和理解STM32F103系列芯片的地址映射和寄存器映射原理;了解GPIO端口的初始化设置三步骤(时钟配置、输入输出模式设置、最大速率设置)。
目录 一:什么是寄存器 1. 2. 二.程序设计思路 1.GPIO模式 2.存储器空间 3.存储器映射 4.寄存器操作 三.GPIO寄存器 STM32 GPIO口的工作模式: 四.总结: ...
- 第五章 国产MCU 雅特力AT32F403A 基于v2库的点灯实验,位带操作控制,库函数控制
目录 概述 硬件 软件 初始化gpio 相关代码: 库函数操作 相关代码: 位带操作 相关代码: 最后 概述 本文主要是使用AT32F403A开发板,基于V2库的点灯程序. 工程建立.调试工具配置在前 ...
- DSP28377s系统时钟配置注意事项
DSP28377s系统时钟配置注意事项 问题一脸嫣然的向我们走来... 近日,一个兄弟在配置基于28377s芯片的主控系统时钟时,遇到点困难. 具体是这样的,原来的主控板使用的是20MHz外部晶振,为 ...
- Cubemx与HAL库系列教程|系统时钟配置详解及源码分析
STM32时钟系统简介 STM32种类繁多,时钟系统也不尽相同,但基本的还是大差不差,今日小飞哥就F1系列的MCU简单聊一聊STM32的时钟系统 1.时钟种类介绍: 先来看一看时钟树图,包含了整个系统 ...
- MSP430F5529 DriverLib 库函数学习笔记(一)时钟配置和闪烁LED
目录 一.新建工程 二.时钟树 时钟系统结构 时钟系统的原理 时钟树配置实战 三.点灯工程师 封装好的初始化函数 平台:Code Composer Studio 10.3.1 MSP430F5529 ...
最新文章
- 数据验证html,JavaScript 表单数据验证
- 关于如何开办餐饮店?
- Bitmap类getPixels()方法中参数stride理解
- 反思浏览器可以postman调试不通:直接从浏览器复制的参数有空格,查询为空
- [vue] 在移动端使用vue,你觉得最佳实践有哪些?
- 【数学】MORE XOR
- DataGridView使用方法汇总
- The LLVM Compiler Infrastructure | LLVM编译器基础设施
- java安装时无法写入文件_Java - 无法写入第二个文件
- liunx apache 的安装
- Linux服务器 -- 安全篇
- Java反射--实战篇
- Java实现的餐厅点餐系统源码Java点餐系统Java点餐系统Java网上订餐系统Java在线订餐系统
- java图书馆借书系统三个类_Java入门第三季-异常-图书馆借书系统
- matlab的开方算法_区域生长算法(附MATLAB代码实现)
- 按键精灵打怪学习-多窗口多线程后台技能
- yaw公式_横摆角速度(Yaw Rate)估算(上)
- 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合
- 【数字IC第一步】Linux系统安装(含常用IC软件)
- Linux系统进程查看命令