STM32 进不了main 函数

1. 我用的是STM32L151C8T6 的芯片,在github 上找了个别人的例程,拿来当模板改,由于他用的是HSE 外部晶振,我用的是内部晶振HSI,所以需要改系统时钟,改完后debug, 一直进不了main 函数,老以为是我改系统时钟改错了, 搞半天才找到原因,是printf 和微库 Use MicroLIB 的问题,keil 里面勾选就可以了

在这里插入图片描述

2. 改写系统初始化函数 void SetSysClock(void), 关闭HSE, 使用HSI

void SetSysClock(void)
{__IO uint32_t StartUpCounter = 0;__IO uint32_t HSEStatus = 0;__IO uint32_t HSIStartUpCounter = 0;__IO uint32_t HSIStatus = 0;/* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/
//    RCC->CR |= ((uint32_t)RCC_CR_HSEON); // Enable HSE
//    /* Wait till HSE is ready and if Time out is reached exit */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_ACC64; // Enable 64-bit access
//        FLASH->ACR |= FLASH_ACR_PRFTEN; // Enable Prefetch Buffer
//        FLASH->ACR |= FLASH_ACR_LATENCY; // Flash 1 wait state
//        RCC->APB1ENR |= RCC_APB1ENR_PWREN; // Power enable
//        PWR->CR = PWR_CR_VOS_0; // Select the Voltage Range 1 (1.8 V)
//        while((PWR->CSR & PWR_CSR_VOSF) != RESET) // Wait Until the Voltage Regulator is ready
//        {
//        }
//        RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1; // HCLK = SYSCLK /1
//        RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1; // PCLK2 = HCLK /1
//        RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV1; // PCLK1 = HCLK /1
//        /*  PLL configuration */
//        RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLMUL | RCC_CFGR_PLLDIV));
//        RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMUL12 | RCC_CFGR_PLLDIV3);
//        RCC->CR |= RCC_CR_PLLON; // Enable PLL
//        while((RCC->CR & RCC_CR_PLLRDY) == 0) // Wait till PLL is ready
//        {
//        }
//        /* Select PLL as system clock source */
//        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)RCC_CFGR_SWS_PLL) // Wait till PLL is used as system clock source
//        {
//        }
//    }
//    else // HSE startup fail, then use HSI as system clock source
//    {RCC->CR |= RCC_CR_HSION; // enable HSI as system clock sourcedo{HSIStatus = RCC->CR & RCC_CR_HSIRDY;HSIStartUpCounter++;} while ((HSIStatus == 0) && (HSIStartUpCounter != HSI_STARTUP_TIMEOUT)); // Wait till HSI is ready and if Time out is reached exitif ((RCC->CR & RCC_CR_HSIRDY) != RESET){HSIStatus = (uint32_t)0x01;}else{HSIStatus = (uint32_t)0x00;}if (HSIStatus == (uint32_t)0x01){FLASH->ACR |= FLASH_ACR_ACC64; // Enable 64-bit accessFLASH->ACR |= FLASH_ACR_PRFTEN; // Enable Prefetch BufferFLASH->ACR |= FLASH_ACR_LATENCY; // Flash 1 wait stateRCC->APB1ENR |= RCC_APB1ENR_PWREN; // Power enablePWR->CR = PWR_CR_VOS_0; // Select the Voltage Range 1 (1.8 V)while((PWR->CSR & PWR_CSR_VOSF) != RESET) // Wait Until the Voltage Regulator is ready{}RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1; // HCLK = SYSCLK /1RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1; // PCLK2 = HCLK /1RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV1; // PCLK1 = HCLK /1/*  PLL configuration */RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLMUL | RCC_CFGR_PLLDIV));RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSI | RCC_CFGR_PLLMUL4 | RCC_CFGR_PLLDIV2);RCC->CR |= RCC_CR_PLLON; // Enable PLLwhile((RCC->CR & RCC_CR_PLLRDY) == 0) // Wait till PLL is ready{}/* Select PLL as system clock source */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)RCC_CFGR_SWS_PLL) // Wait till PLL is used as system clock source{}}else{// HSI startup fail}
//    }
}

3. STM32L151C8T6 系统时钟树,在STM32CubeMX 软件里面可以看的到

在这里插入图片描述

4. Debug 的时候一直卡在这个地方

在这里插入图片描述

5. 勾选微库,重新编译,再debug调试就OK了

在这里插入图片描述

6. 或者不勾选微库也行,禁用半主机模式就可以了

在这里插入图片描述

7. 跟fputc 没关系的, 重新编译,调试就可以了,查看系统各个总线的时钟

在这里插入图片描述

8. 我的问题是这个宏没有打开,导致下面的代码都没有编译进来,也就没有禁用半主机模式,没注意看他还在这里加了一个日志宏开关,我直接把他干掉了,坑爹的玩意

在这里插入图片描述

9. 启动文件,系统宏配置

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/54079.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言练习题29:获得月份天数

获得月份天数 代码&#xff1a; //法一 #include<stdio.h> int main() {int y 0;int m 0;int days[13] { 0,31,28,31,30,31,30,31,31,30,31,30,31 };while (~scanf("%d%*c%d", &y, &m)) {int day days[m];if ((y % 4 0) && ((y % 400 …

图像线段检测几种方法

1、方法一 当我将OpenCV提升到4.1.0时&#xff0c;LineSegmentDetector&#xff08;LSD&#xff09;消失了。 OpenCV-contrib有一个名为FastLineDetector的东西&#xff0c;如果它被用作LSD的替代品似乎很好。如果你有点感动&#xff0c;你会得到与LSD几乎相同的结果。 2、方…

PHP“牵手”拼多多商品详情数据获取方法,拼多多API接口批量获取拼多多商品详情数据说明

拼多多商品详情接口 API 是开放平台提供的一种 API 接口&#xff0c;它可以帮助开发者获取拼多多商品的详细信息&#xff0c;包括商品的标题、描述、图片等信息。在拼多多电商平台的开发中&#xff0c;拼多多详情接口 API 是非常常用的 API&#xff0c;因此本文将详细介绍拼多多…

前端性能优化之js优化

文章目录 引言一、浏览器加载js文件过程二、浏览器加载js和图片的对比三、浏览器加载js资源占总资源加载时间的比例四、v8的编译原理概述五、代码层面优化&#xff0c;提高V8编译效率1. 函数优化1. 减少函数大小和复杂度2. 避免使用动态特性3. 避免使用eval()和with语句4. 使用…

【C++】C++ 引用详解 ⑤ ( 函数 “ 引用类型返回值 “ 当左值被赋值 )

文章目录 一、函数返回值不能是 " 局部变量 " 的引用或指针1、函数返回值常用用法2、分析函数 " 普通返回值 " 做左值的情况3、分析函数 " 引用返回值 " 做左值的情况 函数返回值 能作为 左值 , 是很重要的概念 , 这是实现 " 链式编程 &quo…

淘宝API技术解析,实现关键词搜索淘宝商品(商品详情接口等)

淘宝提供了开放平台接口&#xff08;API&#xff09;来实现按图搜索淘宝商品的功能。您可以通过以下步骤来实现&#xff1a; 获取开放平台的访问权限&#xff1a;首先&#xff0c;您需要在淘宝开放平台创建一个应用&#xff0c;获取访问淘宝API的权限。具体的申请步骤和要求可以…

Redis中 为什么Lua脚本可以保证原子性?

Redis中 为什么Lua脚本可以保证原子性&#xff1f;

LabVIEW开发灭火器机器人

LabVIEW开发灭火器机器人 如今&#xff0c;自主机器人在行业中有着巨大的需求。这是因为它们根据不同情况的适应性。由于消防员很难进入高风险区域&#xff0c;自主机器人出现了。该机器人具有自行检测火灾的能力&#xff0c;并通过自己的决定穿越路径。 由于消防安全是主要问…

java八股文面试[java基础]——如何实现不可变的类

知识来源&#xff1a; 【23版面试突击】如何实现不可变的类&#xff1f;_哔哩哔哩_bilibili 【2023年面试】怎样声明一个类不会被继承&#xff0c;什么场景下会用_哔哩哔哩_bilibili

python 把 易语言转成python 易语言和Python通信的实现

python 把 易语言转成python Python作为一种高效的编程语言&#xff0c;已经越来越受到开发者的欢迎。易语言是一种极为流行的编程语言&#xff0c;也有非常多的用户。然而&#xff0c;由于易语言语法比较简单&#xff0c;对于一些高级编程需求可能无法满足&#xff0c;对于需…

SystemVerilog中的Program的学习笔记

1、SystemVerilog中的Program的作用&#xff1f; 将验证部分与设计部分进行隔离&#xff08;实现方式就是将软件验证部分放置program中&#xff09;2、SystemVerilog中的Program结束方式&#xff1f; Program结束方式分为两种&#xff1a;1、隐式结束 2、显式结束 1、隐式结束…

JVM 之字节码(.class)文件

本文中的内容参考B站尚硅谷宋红康JVM全套教程 你将获得&#xff1a; 1、掌握字节码文件的结构 2、掌握Java源代码如何在JVM中执行 3、掌握一些虚拟机指令 4、回答一些面试题 课程介绍 通过几个面试题初始字节码文件为什么学习class字节码文件什么是class字节码文件分析c…

2022年03月 C/C++(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;拦截导弹 某国为了防御敌国的导弹袭击&#xff0c; 发展出一种导弹拦截系统。 但是这种导弹拦截系统有一个缺陷&#xff1a; 虽然它的第一发炮弹能够到达任意的高度&#xff0c;但是以后每一发炮弹都不能高于前一发的高度。 某天&#xff0c; 雷达捕捉到敌国的…

【编码规范】从代码之丑聊代码规范

最近看了代码之丑&#xff0c;就打算整理下&#xff0c;总结一下。 代码命名 首先从命名来说的话&#xff0c;其实对于大多数程序员来说&#xff0c;可能基本都是翻译软件翻译下&#xff0c;然后就直接改成对应的类名、参数名、函数名等。其实仔细一想&#xff0c;命名其实是…

Vue3.0极速入门- 目录和文件说明

目录结构 以下文件均为npm create helloworld自动生成的文件目录结构 目录截图 目录说明 目录/文件说明node_modulesnpm 加载的项目依赖模块src这里是我们要开发的目录&#xff0c;基本上要做的事情都在这个目录里assets放置一些图片&#xff0c;如logo等。componentsvue组件…

SFM structure from motion

struction就是空间三维点的位置 motion 就是相机每帧的位移 https://www.youtube.com/watch?vUhkb8Zq-dnM&listPL2zRqk16wsdoYzrWStffqBAoUY8XdvatV&index9

Spark写数据到Doris报错node and exceeded the max retry times

用spark dataframe向doris写数据时&#xff0c;报下面错误&#xff1a; Failed to load data on BE: http://192.168.50.10:18040/api/mydb/dwd_virtual_table/_stream_load? node and exceeded the max retry times. 发现表没写入成功。刚开始很困惑&#xff0c;后来发现是…

西部AI小镇-构建自主虚拟世界

背景 未来曜文有接入市场上所有面向chatGPT开发的应用&#xff0c;例如开源聊天组件&#xff0c;西部小镇等 内容介绍 生成代理起床&#xff0c;做早餐&#xff0c;然后去上班&#xff1b;艺术家作画&#xff0c;作家写作&#xff1b;他们形成意见、互相关注并发起对话&…

Linux线程 --- 生产者消费者模型(C语言)

在学习完线程相关的概念之后&#xff0c;本节来认识一下Linux多线程相关的一个重要模型----“ 生产者消费者模型” 本文参考&#xff1a; Linux多线程生产者与消费者_红娃子的博客-CSDN博客 Linux多线程——生产者消费者模型_linux多线程生产者与消费者_两片空白的博客-CSDN博客…

基于Java+SpringBoot+Vue前后端分离党员教育和管理系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…