RT-Thread Studio使用——创建工程并配置外部时钟(转)
硬件:正点原子阿波罗F429开发板,主控STM32F429IGT6,晶振25MHz。
软件:RT-Thread Studio
RT-Thread版本:4.1.0
1.创建工程
根据所使用的硬件信息,配置以上信息,注意红色框中的建议内容:工程用的是内部时钟,通常我们用的是外部时钟,需要修改drv_clk.c文件。
2.修改时钟配置函数
时钟的配置是在drivers/drv_clk.c文件中,函数system_clock_config()完成的,可以看到用的是内部时钟HSI。配置外部时钟可以由CubeMX来完成,最后直接将生成的时钟配置函数内容复制到drivers/drv_clk.c函数system_clock_config()中。
在这里我后面要用到USB,USB时钟需要配置为48MHz,所以主频配置为168MHz。系统时钟频率根据自己的需要来配置即可。
修改后的时钟配置函数如下:
RCC_OscInitTypeDef RCC_OscInitStruct = { 0 };
RCC_ClkInitTypeDef RCC_ClkInitStruct = { 0 }; /** Configure the main internal regulator output voltage
*/
__HAL_RCC_PWR_CLK_ENABLE();
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
/** Initializes the CPU, AHB and APB busses clocks
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 25;
RCC_OscInitStruct.PLL.PLLN = 336;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 7;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
/** Initializes the CPU, AHB and APB busses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
{
Error_Handler();
}
注意:RT-Thread Studio生成的工程中,drivers/stm32f4xx_hal_conf.h文件中定义外部晶振频率为8MHz,这里我用的外部晶振是25MHz的,这里需要做修改。(一开始按照其他人的教程修改了时钟配置函数,但是没有修改晶振频率,即HSE_VALUE的值,导致控制台输出一直乱码,后面debug之后才发现是时钟频率不对,一步步追踪到HSE_VALUE这个值)
默认的值
修改后的
3.打印时钟信息
int main(void)
{
int count = 1;
//定义IO口模式
rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);
while (count++)
{
//LOG_D("Hello RT-Thread!");
LOG_D("System Clock information");
LOG_D("SYSCLK_Frequency = %d", HAL_RCC_GetSysClockFreq());
LOG_D("HCLK_Frequency = %d", HAL_RCC_GetHCLKFreq());
LOG_D("PCLK1_Frequency = %d", HAL_RCC_GetPCLK1Freq());
LOG_D("PCLK2_Frequency = %d", HAL_RCC_GetPCLK2Freq());
rt_thread_mdelay(1000);
rt_pin_write(LED0_PIN, PIN_HIGH);
rt_thread_mdelay(1000);
rt_pin_write(LED0_PIN, PIN_LOW);
}
return RT_EOK;
}
**补充:**系统时钟初始化函数调用流程
board.c文件中的rt_hw_board_init()函数 -> drv_common.c文件中的hw_board_init()函数 -> drv_clk.c文件中的clk_init()函数 -> drv_clk.c文件中的system_clock_config()函数。
知道这个流程之后就可以自行修改时钟配置函数。
总结:关于修改外部时钟配置的网上有很多人写过,只不过可能不少人会忽略了修改stm32f4xx_hal_conf.h文件中HSE_VALUE的值。在这里记录一下自己踩过的坑,希望大家学习顺利!
原文链接:https://blog.csdn.net/weixin_44735205/article/details/127115627
RT-Thread Studio使用——创建工程并配置外部时钟(转)的更多相关文章
- Visual Studio 2012,创建工程Build Driver,基于纯Source Code.
拿到一堆纯代码,怎么去Create Project,设置Include路径,lib路径,要不要Pre-compile技术,配置Project之间的依赖关系. SourcesConverter Bas ...
- stm32 时钟配置——外部时钟倍频、内部时钟倍频 【worldsing笔记】
stm32可选的时钟源 在STM32中,可以用内部时钟,也可以用外部时钟,在要求进度高的应用场合最好用外部晶体震荡器,内部时钟存在一定的精度误差. 准确的来说有4个时钟源可以选分别是HSI.LSI.H ...
- 解决Visual Studio 2015创建工程时的“DNX SDK version 'dnx-clr-win-x86.1.0.0-beta5' failed to install.”错误
前段时间发布了Visual Studio2015,在后,发现创建Asp.Net工程和时,出现了"DNX SDK version 'dnx-clr-win-x86.1.0.0-beta5' f ...
- CCS V5 使用教程二:创建工程和配置软件仿真
新建CCS项目 选择File/New/CCS Project: 新建项目对话框 1) Project name: 指项目名称,这里要注意的项目名称不区分大小写. 2) Ou ...
- 在Simplicity Studio下创建适用于EFR32的工程项目
1.使用平台 使用平台描述了在Simplicity Stdio下创建工程时所使用的操作系统与软件版本等. 操作系统:Windows 10 Simplcity Studio版本:Simlicity St ...
- Visual Studio IDE环境下利用模板创建和手动配置CUDA项目教程
目前版本的cuda是很方便的,它的一个安装里面包括了Toolkit`SDK`document`Nsight等等,而不用你自己去挨个安装,这样也避免了版本的不同步问题. 1 cuda5.5的下载地址,官 ...
- App开发流程之创建项目和工程基本配置
我的开发环境为:Mac OS X EI Capitan(10.11.6),Xcode 7.3.1 首先说明一下这个项目的初衷,我并非要创建一个完整的上架应用,旨在创建一个可运行的,通用配置.架构,提供 ...
- Visual Studio中C++工程的环境配置方法
在Visual Studio的C++工程设置 1.添加工程的头文件目录:工程---属性---配置属性---c/c++---常规---附加包含目录. 2.添加文件引用的lib静态库路径:工程---属性- ...
- RT Thread 通过ENV来配置SFUD,操作SPI Flash
本实验基于正点原子stm32f4探索者板子 请移步我的RT Thread论坛帖子. https://www.rt-thread.org/qa/forum.php?mod=viewthread& ...
- idea创建web工程、配置tomcat及基本配置
背景 现在许多人从eclipse转到idea了,小编也不例外.但是刚转初期还是有挺多不适应的,特总结了创建maven的web工程.配置tomcat服务器及基本配置.有了这些配置,上手idea也就跟ec ...
随机推荐
- 出现报错:The field admin.LogEntry.user was declared with a lazy reference to 'api.user', but app 'api' isn't installed.解决方法
- flask博客项目之tinymce图片上传
查看当前的博客发表情况 截图一张立马粘贴进来 点击发表,显示数据太长 不断撤退回到刚刚页面 删除大图,换成小图,上传方式 点击发表可以成功发表 数据库中查看,是把图片生成这种编码后字符串方式存储的了, ...
- 搭建漏洞环境及实战——搭建XSS测试平台
XSS测试平台是测试XSS漏洞获取cookie并接收Web页面的平台,XSS可以做成JS能做的所有事,包括但不限于窃取cookie.后台增删文章.钓鱼.利用CSS漏洞进行传播.修改网页代码.网站重定向 ...
- python之路40 前端之 CSS 标签查询
表单标签的补充说明 基于form表单发送数据 1.用于获取用户数据的标签至少应该含有name属性 name属性相当于字典的键 用户输入的数据会被保存到标签的value属性中 value属性相当于字典的 ...
- [cocos2d-x]飞机大战 遇到的bug和总结(一)
第一点: Sequence* sequence=Sequence::create(actionMove, actionFinished,NULL); create方法的最后必须加上NULL,不然会报出 ...
- .NET 7新特性
2022年11月份微软推出了带有STS(标准期限支持)的.NET版本7,仅提供18个月的支持. 微软今年推出了STS版本,因为它已经在2019年提到,它将在每年11月左右发布一个新版本的.NET. 但 ...
- webpack 中 loader 和 plugin 的区别
通俗点讲loader是转换,plugin是执行比转换更复杂的任务,比如合并压缩等 loader:让webpack能够处理非js文件,然后你就可以利用 webpack 的打包能力,对它们进行处理. 例如 ...
- 记一次使用gdb诊断gc问题全过程
原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介 上次解决了GC长耗时问题后,系统果然平稳了许多,这是之前的文章<GC耗时高,原因竟是服务流量小?> 然 ...
- Dubbo2.7的Dubbo SPI实现原理细节
总结/朱季谦 本文主要记录我对Dubbo SPI实现原理的理解,至于什么是SPI,我这里就不像其他博文一样详细地从概念再到Java SPI细细分析了,直接开门见山来分享我对Dubbo SPI的见解. ...
- liinux-目录、文件结构及相关命令
1.前期必备知识 1.命令提示符 [root@max001 ~]#:root表示用户信息,max001表示主机名称. [root@max001 ~]%:普通用户结尾是$符号. 2.命令格式规范(语法规 ...