【STM32】写Keil程序的注意事项

news2025/2/23 22:34:21

 看正点原子的资料使用Keil写STM32程序的时候,总是在不断学习,不断探索。后续又学到啥再更新······

目录

1    Keil设置

1.1    字体设置

1.2    快捷键设置

1.3    快速前往前一操作位置/后一操作位置

2    宏定义

2.1    宏定义函数时为什么使用do{…}while{0} 

3    函数

3.1    形参

4    编写时的注意事项

5    程序出错的日常原因排查 

5.1    不执行(连主程序while循环体内都不执行)

5.2    中断服务函数不执行

5.3    卡在中断服务函数出不来


1    Keil设置

1.1    字体设置

下载了JetBrains Mono字体想用于Keil,但发现Configuration中设置字体可能会无效,需要将Encoding从GB2312改为ANSI才能生效。但同时,使用ANSI就无法使用中文输入了,中文的输入会变成问号。如果用UTF-8编码的话,原有使用GB2312编码的文件中的中文又会乱码,算了,最终还是默认的好用。

1.2    快捷键设置

见 Edit – Configuration – Shortcut Keys

1.3    快速前往前一操作位置/后一操作位置

工具栏按钮的蓝色左右直箭头,也可使用快捷键ctrl + – 以及ctrl + shift + – 来实现。貌似不支持鼠标的前进后退按钮。

2    宏定义

2.1    宏定义函数时为什么使用do{…}while{0} 

复杂逻辑需要使用do{…}while{0}保证宏在替换时的代码合理性以及其不会违反使用者的操作逻辑。

详见这位大佬的文章:【嵌入式C语言】--do{…}while(0)的学习_do{ x ?-CSDN博客

3    函数

3.1    形参

定义和声明函数时,若形参列表是空,就应该设置形参为void,而不是保留为空,否则编译可能出错。

4    编写时的注意事项

  • 无论是.c文件还是.h文件,都需要在文件末尾有新行,否则会warnning。
  • 应尽量别用HAL_Delay函数,可以使用正点原子的delay代替,因为HAL_Delay是基于系滴答计时器的中断实现的,而其中断优先级太低,若在某个外设的中断中使用了HAL_Delay,其就会因为HAL_Delay的中断无法触发而陷入阻塞。

5    程序出错的日常原因排查 

5.1    不执行(连主程序while循环体内都不执行)

  • 自己写的中断是否实现了中断服务函数;
  • 中断服务函数中是否调用了公共中断服务函数;

5.2    中断服务函数不执行

  • 是否__HAL_PPP_ENABLE_IT了相应的中断;
  • 是否HAL_NVIC_SetPriority和HAL_NVIC_EnableIRQ了相应的中断服务;
  • 如果和PPPx有关,即同类外设有多个且自带编号,则检查中断服务函数、中断回调处理函数名和函数内容中的x是否写错,再检查NVIC相关的函数内容中是否写错了PPPx_IRQn的x;

5.3    卡在中断服务函数出不来

  • 是否在中断服务函数中使用了HAL_Delay函数;

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

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

相关文章

DockerHub解决镜像拉取之困

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

【数据结构篇】~栈和队列(附源码)

【数据结构篇】~栈和队列 前言一、栈的实现1.头文件2.源文件3.一个算法题——[有效的括号](https://leetcode.cn/problems/valid-parentheses/description/%E2%80%8B) 二、队列1.头文件2.源文件 前言 栈:一种特殊的线性表,其只允许在固定的一端进行插入…

极速文件预览!轻松部署 kkFileView 于 Docker 中!

大家好,这几天闲的难受,决定给自己找点事做。博主的项目中有个文件预览的小需求,原有方案是想将文件转换成 PDF 进行预览。本着能借鉴就绝对不自己写的原则。今天就让我们简单试用一下 kkFileView 文件预览服务,一起探索它的强大功…

先导桌面式教育数控 小型数控车床 C59

桌面式教育数控主要指的是在教育领域中使用桌面型数控机床进行教学和培训。这种设备结合了数控技术和小型化设计,使得数控技术的学习和应用变得更加便捷和经济。 桌面式教育数控的主要特点包括: 小型化:机床体积小,重量轻&#x…

Debezium2.7 数据同步 MySQL/Oracle -- AI生成

Debezium是Red Hat开源的一个工具,用于实时捕获多种数据源(包括MySQL、PostgreSQL、SQL Server、Oracle等)的变更数据,并将这些数据作为事件流输出到Kafka等消息中间件中。通过Debezium,可以实现数据的实时同步和变更数…

Vue组件库Element和Vue路由

目录 一、Vue组件库Element(学会怎么CV) 快速入门 ElementUI的常用组件 1.Table表格 (1)组件演示 (2)组件属性详解 2.Pagination分页 (1)组件演示 (2&#xff0…

易企秀Html5场景秀系统源码 海量模版可以选择 带源代码包以及搭建部署教程

系统概述 易企秀 HTML5 场景秀系统源码是基于 PHPMySQL 组合开发的一套强大的 H5 页面制作系统。它旨在满足企业和个人对于个性化 H5 页面制作的需求,无论是企业宣传、活动推广、产品展示还是邀请函制作等,都能通过该系统轻松实现。 该系统的核心优势在…

智能优化算法-森林优化算法(FOA)(附源码)

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1.内容介绍 森林优化算法 (Forest Optimization Algorithm, FOA) 是一种基于自然生态系统的元启发式优化算法,它模拟了森林生态系统中的植物生长、竞争和合作等行为,用于解决复杂的优化问题。 FOA的…

uniapp中 使用 VUE3 组合式API 怎么接收上一个页面传递的参数

项目是uniapp &#xff0c;使用了vue3 vite // 使用的组合式API 的 语法糖 <script setup> // 无法使用 onLoad <script> 使用不了下面方法获得上一个页面参数传递 onLoad(options){ } 解决方案1&#xff08;亲测Ok&#xff09;&#xff1a;消息通知与监听…

计算机毕业设计选题推荐-岗位招聘数据可视化分析-Python爬虫

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

Android12 显示框架之Transaction----server端

目录&#xff1a;Android显示终极宝典 上篇讲完了在client端Transaction的内容&#xff0c;最后调用setTransactionState()把所有的参数都交给了surfaceflinger&#xff0c;那么任务就交给server来完成了。本节我们一起接着看看下面的内容。 setTransactionState() //framew…

SQL手工注入漏洞测试(MongoDB数据库)

此次靶场地址为&#xff1a;墨者学院 ⼀. 如下给出的源码...可以看到数据库查询的语句如下..构造回显测试... new_list.php?id1});return ({title:1,content:2 ⼆.成功显示“ 1” 和“ 2” 。可以在此来显示想要查询的数据。接下来开始尝试构造payload查询 当前数据库。通过…

Python基础知识学习总结(七)

文章目录 一. 函数1. 定义函数2. 语法及实例3. 函数调用4. 参数传递5. 可更改与不可更改对象6. 传可变对象实例 二. 文件I/O1. 定义2. File对象的属性3. open 函数4. write()方法5. read()方法6. 文件定位 一. 函数 函数是组织好的&#xff0c;可重复使用的&#xff0c;用来实…

【微服务】SpringCloud Alibaba 10-14章

10 SpringCloud Alibaba入门简介 10.1 是什么 诞生 2018.10.31&#xff0c;Spring Cloud Alibaba 正式入驻了 Spring Cloud 官方孵化器&#xff0c;并在 Maven 中央库发布了第一个版本。 Spring Cloud Alibaba 介绍 10.2 能干嘛 https://github.com/alibaba/spring-cloud-al…

芯片后端之 PT 使用 report_timing 产生报告 之 -nets 选项

今天&#xff0c;我们再学习一点点 后仿真相关技能。 那就是&#xff0c;了解 report_timing 中的 -nets 选项 。 如果我们仅仅使用如下命令&#xff0c;执行后会发现&#xff1a; pt_shell> report_timing -from start_point -to end_point -delay_type max report_ti…

JavaScript(31)——内置构造函数

构造函数 构造函数是一种特殊的函数&#xff0c;主要用于快速初始化对象 用大写字母开头只能由new操作符来执行 function Stu(name, age) {this.name namethis.age age}const xiaom new Stu(小明, 18)const xiaoh new Stu(小红, 19)console.log(xiaom);console.log(xiaoh…

catkin_make 编译报错CMake Error at /opt/ros/noetic/share/catkin/cmake/的最全解决办法,包治百病

检索&#xff08;解决安装了Anaconda后catkin_make不能用了&#xff0c;CMake Error at /opt/ros/noetic/share/catkin/cmake/catkinConfig.cmake:83 (find_package):Could not find a package configuration file provided by "serial" with any&#xff0c;Invokin…

Stable Diffusion AI绘画工具的安装与配置(MAC用户)

AI绘画的热潮席卷了整个创意行业&#xff0c;Stable Diffusion作为其中的翘楚&#xff0c;让艺术创作变得前所未有的简单。然而&#xff0c;对于使用Mac电脑用户来说&#xff0c;安装和配置Stable Diffusion可能显得有些棘手。别担心&#xff0c;这份详细的教程将手把手教你如何…

ARM——驱动——Linux启动流程和Linux启动

一、flash存储器 lash存储器&#xff0c;全称为Flash EEPROM Memory&#xff0c;又名闪存&#xff0c;是一种长寿命的非易失性存储器。它能够在断电情况下保持所存储的数据信息&#xff0c;因此非常适合用于存储需要持久保存的数据。Flash存储器的数据删除不是以单个的字节为单…

Cetos7安装详细流程

CentOS 7是一个流行的Linux发行版&#xff0c;广泛用于服务器和桌面环境。以下是在物理机或虚拟机上安装CentOS 7的详细步骤&#xff1a; 准备工作 下载CentOS 7 ISO&#xff1a;访问CentOS官方网站下载CentOS 7的ISO镜像文件。 创建启动介质&#xff1a;使用ISO镜像文件创建…