STM32 C语言基础知识

STM32 C语言基础知识

位操作

位操作运算符

运算符含义
&按位与
|按位或
^按位异或相同位为0 相异为0
~按位取反
<<左移二进制位左移n位
>>右移二进制位右移n位

单片机开发中的实用技巧

  1. 不改变其他位的情况下对某几个值进行设值
/* 首先进行清零操作 */
GPIOA->CRL & = 0XFFFFFFBF;              /* 将bit6清0 0xB = 0x1011 从右往左数第6位 */
/* 然后再与需要设置的值进行或运算 */
GPIOA->CRL | = 0xFFFFFF40;              /* 设置bit6的值为1 不改变其他位的值 */
  1. 移位操作提高代码的可读性
SyTick->CTRL |= 1 << 1;                 /* 将CTRL寄存器的第一位(从0开始算起)设置为1 */
  1. 按位取反操作使用技巧
/* 向左移动1位 取反 还是0 */
SysTick->CTRL & = ~(1 << 0);            /*仅将CTRL寄存器的第0位(最低位)设置为0 */
  1. 按位异或操作使用技巧
GPIPB->ODR ^= 1 << 5;                   /* 使PB5的状态翻转一次 */

define宏定义

defineC语言中的预处理命令,用于宏定义,可以提高源代码的可读性

#define         标识符          字符串
#define         HSE_VALUE       8000000U        /* U表示 unsigned */

ifdef条件编译

当满足某条件时对一组语句进行编译,当条件不满足时则编译另一组语句

/* 条件编译命令最常见的形式 */
#ifdef 标识符程序段1
#else程序段2
#endif

当标识符已经被定义过(一般是用#define命令定义),则对程序段1进行编译,否则编译程序段2,其中#else部分也可以没有

条件编译在MDK里面用的很多,例如在stm32f4xx.h头文件中经常会看到这样的语句:

#if !define(STM32F4)
#define STM32F4
#endif
/* 如果没有定义STM32F4宏 则需要先定义该宏 */

extern 外部声明

C语言中extern可以置于变量或函数前,以表示变量或函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义,注意,对于extern声明变量可以多次,但定义只有一次

该语句用于声明g_usart_rx_sta变量在其他文件中已经定义了,而且这里要用到

extern uint16_t g_usart_rx_sta;

可以找到在某个地方有变量定义的语句

typedef 类型别名

用于简化变量的定义

struct _GPIO
{__IOuint32_t CRL;__IOuint32_t CHR;...
};/* 定义结构体变量gpiox */struct _GPIO gpiox;

为结构体定义一个别名GPIO_TypeDef,这样就可以在其他地方通过别名GPIO_TypeDef来定义结构体变量了

typedef struct
{__IOuint32_t CRL;__IOuint32_t CHR;...
} GPIO_TypeDef;

typedef为结构体定义了一个别名GPIO_TypeDef,这样就可以通过GPIO_TypeDef来定义结构体变量

结构体

声明结构体类型

struct 结构体名
{成员列表;
} 变量名列表;

例如

struct U_TYPE
{int BaudRate;int WordLength;
} usart1, usart2;

结构体声明的时候可以定义变量,也可以声明之后定义

/* 方法 */
struct 结构体名字 结构体变量列表;
/* 例如 */
struct U_TYPE usart1, usart2;/* 结构体成员变量的引用 */
结构体变量名字.成员名
usart1.BaudRate

结构体指针变量的定义

/* 定义结构体指针变量 */
struct U_TYPE *usart3;/* 结构体指针成员变量引用通过 -> 符号实现 */usart->BuadRate;
typedef struct
{uint32_t    BaudRate;uint32_t    WordLength;uint32_t    StopBits;uint32_t    Parity;uint32_t    Mode;uint32_t    HwFlowCtl;uint32_t    OverSampling;
} UART_InitTypeDef;/* 在初始化串口的时候入口参数就可以是 USART_InitTypeDef类型的变量或指针变量了 */
void usart_init(UART_InitTypeDef *huart);

指针

指针是一个指向地址的变量(或常量),其本质是指向一个地址,从而可以访问一片内存区域

/* 声明指针时一般以p开头 */
char * p_str = "This is a test!";

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

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

相关文章

登录时用户名密码加密传输(包含前后端代码)

页面输入用户名密码登录过程中&#xff0c;如果没有对用户名密码进行加密处理&#xff0c;可能会导致传输过程中数据被窃取&#xff0c;就算使用https协议&#xff0c;在浏览器控制台的Request Payload中也是能直接看到传输的明文&#xff0c;安全感是否还是不足。 大致流程&a…

FreeRTOS代码规范(3)

数据类型 portmacro.h : 在里面定义了Free RTOS 用到的相关数据类型 在 CM-3 内核中 short类型是16位&#xff0c;long 类型是32位 在 portmacro.h 中有两个最基本的数据类型 &#xff1a; Base type_t Tick type_t 这两个数据类型的存在是基于执行效率考虑的&#xff0c;…

如何使用 NumPy 和 Matplotlib 进行数据可视化

如何使用 NumPy 和 Matplotlib 进行数据可视化 在数据科学领域&#xff0c;NumPy 和 Matplotlib 是 Python 中最常用的两个库。NumPy 用于科学计算和数据处理&#xff0c;而 Matplotlib 提供了丰富的图表工具来展示数据。本文将介绍如何将这两个库结合使用&#xff0c;轻松进行…

腾讯会议pc端3.29.11开启悬浮窗口

之前是&#xff1a;pc端每次最小化&#xff0c;它就自动收回到任务栏里了 版本&#xff1a;3.29.11 解决办法&#xff1a; 打开腾讯会议&#xff0c;点击左上角的【头像】。 单击【设置】。 选择【显示当前说话者】来管理麦克风浮窗。 再进入会议&#xff0c;点击最小化一哈&…

中小企业设备资源优化:Spring Boot系统实现

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

RabbitMQ常见问题持续汇总

文章目录 消息分发不公平分发限流-basic.qos主要功能使用场景示例代码 消费者默认concurrency数量prefetch和concurrency结合&#xff1f; spring.rabbitmq.template.retry.enabledtrue和spring.rabbitmq.listener.simple.retry.enabledtrue有什么区别1. spring.rabbitmq.templ…

Appium环境搭建全流程(含软件)

目录 1.node.js的安装 1--中文下载地址 2--node.js设置镜像源 2.安装appium 1--全局安装appium 2--安装驱动 uiautomator2 3--查看插件的命令 4--安装 images插件 5--安装 execute-driver 插件 6--安装 relaxed-caps插件 7--安装 universal-xml 插件 3.python安装 1--python下…

Excel功能区变灰是什么原因造成?怎么解决?

Microsoft Excel是广泛使用的电子表格软件&#xff0c;但有时用户可能会遇到功能区变灰的问题&#xff0c;这可能导致功能无法使用&#xff0c;影响工作效率和用户体验。本文将深入探讨Excel功能区灰色的原因及解决方案&#xff0c;帮助读者快速解决这一问题。 一、Excel功能区…

Windows 使用命令行开启热点(无线网卡连接下)

winr 打开命令提示符框&#xff08;管理员模式&#xff09;在cmd中输入 netsh wlan show drivers 检查无线网卡是否已插入继续输入 ssid后面是wifi名称&#xff0c;key后面是密码&#xff0c;可以自行更改 netsh wlan set hostednetwork modeallow ssidWDW keyWDWWDWWDW 设置热…

开源模型应用落地-Qwen2.5-7B-Instruct与vllm实现推理加速的正确姿势-Gradio

一、前言 目前&#xff0c;Qwen模型已经升级到了2.5版本。无论是语言模型还是多模态模型&#xff0c;它们都是在大规模的多语言和多模态数据上进行预训练的&#xff0c;并通过高质量的数据进行后期微调&#xff0c;以更好地符合人类的需求。 Gradio作为一个强大的工具&#xff…

APP专项测试-冷启动-流量-电量-内存

1、响应时间 1.1怎么获取冷启动时间&#xff08;热启动&#xff0c;就是后台不关后台再次打开&#xff09; 方法一 1.2怎么获取包名 与 启动页 方法三soloPi&#xff1a;启动时间(用户角度出发&#xff0c;页面差异进行计算时间)&#xff1a; 然后默认配置。点击开始录制 1开…

云计算行业应用实训室建设方案

一、引言 云计算作为信息技术领域的重要分支&#xff0c;正在深刻影响着各行各业的发展。随着云计算技术的不断成熟和应用领域的不断拓展&#xff0c;对云计算专业人才的需求日益增长。实训室作为培养学生实践能力和创新能力的重要场所&#xff0c;其建设对于提高教育质量和满…

模拟信号采集显示器+GPS同步信号发生器制作全过程(焊接、问题、代码、电路)

1、制作最小系统板 在制作最小系统板的时候&#xff0c;要用USB转TTL给板子供电&#xff0c;留了一个电源输入的四个接口&#xff0c;同时又用排针引出来VCC和GND用于后续其他外设的电源供应&#xff0c;电源配有电源指示灯和保护电容&#xff0c; 当时在焊接的时候把接口处的…

数学建模与优化算法:从基础理论到实际应用

数学建模和优化算法&#xff0c;它们不仅帮助我们理解和描述复杂系统的行为&#xff0c;还能找到系统性能最优化的解决方案。本文将从基础的数学理论出发&#xff0c;逐步深入到各种优化算法&#xff0c;并探讨它们在实际问题中的应用。 思维导图文件可获取&#xff1a;https:…

51单片机应用开发(进阶)---外部中断(按键+数码管显示0-F)

实现目标 1、巩固数码管、外部中断知识 2、具体实现&#xff1a;按键K4&#xff08;INT1&#xff09;每按一次&#xff0c;数码管从0依次递增显示至F&#xff0c;再按则循环显示。 一、共阳数码管 1.1 共阳数码管结构 1.2 共阳数码管码表 共阳不带小数点0-F段码为&#xff…

Python异常检测- DBSCAN

系列文章目录 Python异常检测- Isolation Forest&#xff08;孤立森林&#xff09; python异常检测 - 随机离群选择Stochastic Outlier Selection (SOS) python异常检测-局部异常因子&#xff08;LOF&#xff09;算法 文章目录 系列文章目录前言一、DBSCAN算法原理二、DBSCAN算…

【小白学机器学习16】 概率论的世界观2: 从正态分布去认识世界

目录 1 从正态分布说起 1.1 正态分布的定义 1.2 正态分布的名字 1.3 正态分布的广泛&#xff0c;和基础性 2 正态分布的公式和图形 2.1 正态分布 2.2 标准正态分布 3 正态分布的认识的3个层次 3.1 第1层次&#xff1a;个体的某个属性的样本值&#xff0c;服从正态分布…

《IDE 巧用法宝:使用技巧全解析与优质插件推荐》

在日常撸代码的时候&#xff0c;相信兄弟们在IDEA 中用到不少插件&#xff0c;利用插件&#xff0c;不仅可以提高工具效率&#xff0c;撸起代码来&#xff0c;也格外的娃哈哈…… 一、IntelliJ IDEA 作为一个资深 Java 程序员&#xff0c;除了 IDEA 中默认的插件&#xff0c;我…

重学SpringBoot3-Reactive-Streams规范

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-Reactive-Streams规范 1. 什么是 Reactive-Streams 规范&#xff1f;2. Reactive-Streams 的核心组件2.1 Publisher&#xff08;发布者&#xff09;2.2 …

飞睿智能超宽带UWB音频传输模块,超低延迟数据传输,实时音频声音更纯净

在信息爆炸的时代&#xff0c;音频传输技术正以未有的速度发展&#xff0c;创新我们进入一个全新的听觉世界。今天&#xff0c;我们要探讨的&#xff0c;就是这场技术创新中的一颗璀璨明星——飞睿智能超宽带&#xff08;UWB&#xff09;音频传输模块。它以其独特的优势&#x…