当前位置: 首页 > article >正文

#85_库函数开发

前言在很久很久很久以前C 语言和 STM32走在一条幽静的道路上他们在一起过上了幸福的生活一、 问题引入… 1二、 寄存器的基础概念… 1三、 STM32 寄存器实例解析… 3GPIO 输入/输出 → 对应 GPIOx_CRL / GPIOx_CRH / GPIOx_IDR /… 3定时器Timer→ 对应 TIMx_ARR / TIMx_PSC / TIMx_CNT 等… 4串口通信UART→ 对应 USARTx_SR / USARTx_DR /… 4ADC 模数转换 → 对应 ADCx_CR1 / ADCx_CR2 / ADCx_SQR1 等… 5PWM 输出脉宽调制→ 对应 TIMx_CCR1 / TIMx_ARR… 6复位与时钟 → 对应 RCC_CR / RCC_CFGR 等…6四、 从软件层面理解地址与封装… 7五、 地址值与寄存器位使能的关系…11六、 地址值的封装… 13七、 CAN 初始化函数–“CAN_Init”的解析…16首先看这个语句… 16第 156 行定义的是定义初始化状态跳转对应的宏定义得到下面的图片这里定义了两个地址值 0X 00 和 0X01 将其转化位二进制可以知道… 16在对应寄存器可知如下…17接着就看这一句… 17再接着… 183.1 先查看“CAN_MCR_SLEEP”的宏定义…183.2 解除睡眠模式的方法… 193.3 初始化的方法… 1914.判断是否初始化是否成功… 22八、 对“.hex”文件的解析…25九、 浅谈寄存器寻址的方式… 27十、 寄存器方式启动 GPIOA 总线下的 Pin_0… 29源代码… 30源代码寄存器启动的代码… 30现象如下… 31十一、 总线方式启动 GPIOA 总线下的 Pin关于 C 程序在 STM32 下具体做了什么事情一、问题引入在华清学习的这一段时间首先在老师的带领下巩固了 C 语言相关知识。本人在大学就读机械相关专业期间运用课余时间自学 STM32 并率领成员落地相关自动化项目。并取得设计专年级第一的成绩。但在自学期间有很多的问题这些问题有幸在华清远见的老师的带领下解决了。非常感谢。言归正传大学自学期间最令我头疼的事情是区区几行 C 语言代码怎么能控制我们的硬件。驱动传感器、LED、甚至是网络的呢二、寄存器的基础概念在华清学习期间令我听到最多的关键字就是“寄存器”结合 AI 我们先梳理寄存器是什么好这个 AI 解释我看不懂一、但是我可以很负责任的跟你们说寄存器就是存放相关的工具的小盒子。为了解释这个概念。我给你们看一下由华清老师提供的技术文档1在这里感谢这名名老工程师从业十几年的资源非常实用。感谢感谢 TOP1:名称CAN 主控制寄存器作用用于配置和控制 CANController Area Network控制器局域网外设核心工作模式与关键行为的重要寄存器 TOP2:名称ADC 状态寄存器(ADC_SR)作用ADC 状态寄存器ADC_SR用于反映 ADC 转换状态与监测模拟看门狗情况具体作用如下 TOP3:名称GPIOx_CRL作用具体作用如下用于配置 GPIO 端口的低 8 位引脚 Pin0 ~ Pin7的工作模式和输出类型。2所以看明白了吗关键就是华清上课一直所说的“寄”“存”“器”寄存器内封装了相关对应的功能。这些功能对应了相关的功能。比如说下面这些例子都是单片机/STM32 里最常见的“寄存器 - 功能”对应你可以对应着理解“寄存器是如何封装硬件能力的”三、STM32 寄存器实例解析GPIO 输入/输出 → 对应 GPIOx_CRL / GPIOx_CRH / GPIOx_IDR / GPIOx_CRL / GPIOx_CRH 端口配置寄存器就像你给引脚“选职业”(参照玩王者荣耀)——让 Pin0 是当“输入引脚”还是“输出引脚”输出时速度多快输入时是浮空/上拉/下拉……写这些寄存器的值就是在给引脚“分配工作”。 GPIOx_IDR 输入数据寄存器像“看引脚现在干啥呢”——读取 IDR 寄存器就能知道外部电路给这个引脚灌了高电平还是低电平比如按键有没有被按下。 GPIOx_ODR 输出数据寄存器像“指挥引脚干啥呢”——往 ODR 写 0 或 1引脚就会输出低电平或高电平比如让 LED 亮/灭。3定时器Timer→ 对应 TIMx_ARR / TIMx_PSC / TIMx_CNT 等定时器就像“芯片里的电子秒表”用来计时、产生周期性中断、输出 PWM波……靠的就是一系列寄存器配合 TIMx_ARR 自动重装载寄存器相当于“定闹钟的时间”——写这个寄存器的值就是设置定时器“数到多少后触发事件”比如数到 1000 就溢出。 TIMx_PSC 预分频器寄存器相当于“给秒表调快慢”——写这个值能改变定时器计数的“基准频率”比如把 72MHz 主频分成 7200 分频计数速度就变慢计时更久。 TIMx_CNT 计数器寄存器相当于“秒表现在走到多少了”——读这个寄存器就能知道定时器当前计了多少个数写这个寄存器还能“重置秒表”比如清零重新开始计时。串口通信UART→ 对应 USARTx_SR / USARTx_DR /串口用来和外设/电脑收发数据全靠寄存器控制“啥时候发、啥时候收、发多快、收没收到” USARTx_SR 状态寄存器相当于“串口的「状态指示灯」”——读这个寄存器能知道“有没有收到数据发送缓冲区空没空有没有出错”比如 RXNE1 表示“收到新数据啦可以读了”。 USARTx_DR 数据寄存器4相当于“串口的「收发缓冲区」”——往 DR 写数据串口就会自动把这个数据发出去读 DR就能拿到串口刚收到的数据。 USARTx_BRR 波特率寄存器相当于“串口的「说话速度调节器」”——写这个寄存器的值就能设置串口通信的波特率比如 9600、115200决定每秒发多少个 bit。ADC 模数转换 → 对应 ADCx_CR1 / ADCx_CR2 / ADCx_SQR1 等ADC 是把“模拟电压比如传感器输出的 0~3.3V”转成“数字量芯片能处理的 0~4095”的模块靠寄存器控制“采哪个通道、多快速度采、采多少次平均” ADCx_CR1 控制寄存器 1相当于“ADC 的「总开关模式选择」”——写这个寄存器能打开/关闭 ADC选择是单次转换还是连续转换选择扫描模式一次采多个通道等。 ADCx_CR2 控制寄存器 2相当于“ADC 的「触发方式对齐方式」”——写这个寄存器能设置 ADC是软件触发还是外部引脚触发设置转换结果左对齐还是右对齐方便读数。 ADCx_SQR1~SQR4 序列寄存器相当于“ADC 的「通道队列」”——写这些寄存器能设置“先采哪个通道、再采哪个通道、一共采多少个通道”让 ADC 按顺序自动扫描多个模拟输入。 ADCx_DR 数据寄存器5相当于“ADC 的「转换结果缓存区」”——ADC 完成一次转换后数字量结果会自动存在 DR 里软件读 DR 就能拿到这次采样的电压对应的数字值。PWM 输出脉宽调制→ 对应 TIMx_CCR1 / TIMx_ARRPWM 是用来输出“高低电平占空比可调”的脉冲信号比如控制电机转速、LED 亮度核心也是寄存器配合 TIMx_ARR 自动重装载寄存器相当于“PWM 的「周期长度」”——写这个值决定 PWM 一个周期有多长比如 ARR1000就是 1000 个计数周期为一个 PWM 周期。 TIMx_CCR1 捕获/比较寄存器 1相当于“PWM 的「占空比调节」”——写这个值决定在一个 ARR 周期内高电平持续多久比如 CCR1500ARR1000那占空比就是 50%。 TIMx_CCER 捕获/比较使能寄存器相当于“PWM 的「通道开关」”——写这个寄存器的位能打开/关闭某个 PWM 通道比如只让 CH1 输出 PWMCH2 不输出。复位与时钟 → 对应 RCC_CR / RCC_CFGR 等芯片要正常工作得先“上电复位”“配置时钟频率”这些都靠 RCCReset and Clock Control寄存器 RCC_CR 时钟控制寄存器相当于“芯片的「电源开关时钟源选择」”——写这个寄存器能启动/关闭 HSE外部高速晶振、HSI内部高速 RC 振荡器等时钟源还能看时钟有没有稳定比如 PLLRDY1 表示锁相环已经稳定可以用 PLL 时6钟。 RCC_CFGR 时钟配置寄存器相当于“芯片的「时钟分频器外设总线选择」”——写这个寄存器能把高速时钟比如 72MHz分频后分配给 APB1、APB2 等不同外设总线比如让 GPIO 总线跑 36MHz让定时器总线跑 72MHz还能选择系统时钟是用 HSE 还是 PLL 倍频后的时钟。好四、从软件层面理解地址与封装这里仅仅只是我们从硬件层面上理解一块芯片如何让一堆元器件完成对应的功能的。接着为了解开这个疑惑。我开始第二轮 STM32 的学习。终于真相大白还是这三张图 TOP1: TOP2:78 TOP3:看到了吗地址值这是关键接着再看老师经常操作的库文件未来追根溯源我又有了重大发现 这里的地址值与官方提供的《STM32F1XX 中文参考手册》一一对应。 譬如宏定义 地址值 说明9CAN_MCR_INRQ ((uint16_t)0x0001) 初始化请求CAN_MCR_SLEEP ((uint16_t)0x0002) 睡眠模式请求CAN_MCR_TXFP ((uint16_t)0x0004) 发送 FIFO 优先级CAN_MCR_RFLM ((uint16_t)0x0008) 接收 FIFO 锁定模式CAN_MCR_NART ((uint16_t)0x0010) 禁止自动重传CAN_MCR_AWUM ((uint16_t)0x0020) 自动唤醒模式CAN_MCR_ABOM ((uint16_t)0x0040) 自动总线关闭管理CAN_MCR_TTCM ((uint16_t)0x0080) 时间触发通信模式CAN_MCR_RESET ((uint16_t)0x8000) CAN 软件主复位我们重点关注“地址值”这一列再结合中文参考手册

相关文章:

#85_库函数开发

前言 在很久很久很久以前 C 语言和 STM32 走在一条幽静的道路上 他们在一起过上了幸福的生活 一、 问题引入… 1 二、 寄存器的基础概念… 1 三、 STM32 寄存器实例解析… 3 GPIO 输入/输出 → 对应 GPIOx_CRL / GPIOx_CRH / GPIOx_IDR /… 3定时器(Timer&#xff…...

5个简单步骤:OpenCore Legacy Patcher终极指南让老旧Mac焕发新生

5个简单步骤:OpenCore Legacy Patcher终极指南让老旧Mac焕发新生 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否还在为老旧的Mac无法升级到…...

Lobu多租户AI助手网关:安全隔离与规模化部署实践

1. 项目概述:构建企业级多租户AI助手网关 最近在折腾一个挺有意思的开源项目,叫Lobu。简单来说,它解决了一个很实际的问题:如何安全、高效地在一个组织内部署和管理多个独立的AI助手(Agent)。想象一下&…...

Koel下载功能终极指南:批量下载与压缩包生成的完整教程

Koel下载功能终极指南:批量下载与压缩包生成的完整教程 【免费下载链接】koel Music streaming solution that works. 项目地址: https://gitcode.com/gh_mirrors/ko/koel Koel作为一款优秀的个人音乐流媒体解决方案,其强大的下载功能让用户可以轻…...

如何快速掌握加密算法基础:面向初学者的完整指南

如何快速掌握加密算法基础:面向初学者的完整指南 【免费下载链接】Algorithms A collection of algorithms and data structures 项目地址: https://gitcode.com/gh_mirrors/algorithms39/Algorithms 想要快速掌握加密算法基础吗?加密算法是现代计…...

基于MPA的微前端架构:实现技术栈无关与独立部署的现代Web应用方案

1. 项目概述:一个为现代Web应用量身定制的微前端架构如果你正在为一个大型、多团队协作的Web应用寻找一个既能保持技术栈灵活性,又能实现高效集成与独立部署的解决方案,那么mattmezza/mpa这个项目绝对值得你花时间深入研究。它不是一个简单的…...

为什么你需要HolyTips:7个让漏洞赏金狩猎更高效的实用技巧

为什么你需要HolyTips:7个让漏洞赏金狩猎更高效的实用技巧 【免费下载链接】HolyTips A Collection of Notes, Checklists, Writeups on Bug Bounty Hunting and Web Application Security. 项目地址: https://gitcode.com/gh_mirrors/ho/HolyTips 在网络安全…...

深度学习在人工耳蜗中的应用:从语音增强到医学影像分析

1. 项目概述:当深度学习“听见”声音作为一名长期在医疗科技与信号处理交叉领域摸爬滚打的从业者,我见证过太多技术从实验室走向临床的艰难旅程。其中,“深度学习在人工耳蜗应用中的进展”这个话题,尤其让我感到兴奋。它远不止是一…...

CANN基础设施漏洞管理指南

cve-manager(漏洞管理)使用说明 【免费下载链接】infrastructure 本仓库用于托管CANN社区基础设施团队的公开信息,包括不限于:会议日程,成员信息,服务文档和配置等信息 项目地址: https://gitcode.com/ca…...

JAVA基础教学计划【欢迎指点】

学习JAVA,首先要了解Java语言的第一个特性——面向对象。编程语言就像我们现实生活中面对种种情景是一样的,可以说这是属于计算机的世界,我们人来到计算机世界自然要熟悉这个世界构成方式。在现实中,我们认识一件事物,…...

收藏!2026年普通人也能干的5个高薪AI新职业(无需代码,小白也能学)

文章介绍了5个无需编程技能的AI相关职业:AI训练师、AI内容运营、提示词工程师、AI数据标注员和AI销售顾问。这些职业为没有高学历或技术背景的人提供了进入AI行业的机会,强调了学习AI工具和技能的重要性,鼓励人们抓住AI时代的机遇。 2026年&a…...

CANN/ge添加输出API

AddOutput 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端…...

AI赋能边缘计算安全:从联邦学习到异常检测的实战指南

1. 项目概述:当边缘计算遇上AI,安全与隐私的十字路口最近几年,我身边做物联网、车联网和工业互联网项目的朋友,聊得最多的两个词,一个是“边缘计算”,另一个就是“AI”。把AI模型部署到摄像头、网关、工控机…...

AI思维:跨学科协作与负责任AI实践的核心方法论

1. 项目概述:为什么我们需要“AI思维”?如果你最近在尝试将人工智能技术引入你的工作流程,无论是分析市场数据、优化客户服务,,还是辅助科研实验,你很可能已经感受到了某种“割裂感”。工程师团队在讨论模型…...

AI for Science技术路线图:从量子尺度到连续介质的跨学科实践指南

1. 项目概述与核心价值如果你是一位物理化学背景的研究生,正试图用机器学习预测新催化剂的活性,却发现网上资料要么是纯AI教程,要么是深奥的量子化学专著,中间仿佛隔着一道鸿沟——那么,你找对地方了。这就是“AI for …...

在 Taotoken 控制台中如何进行 API Key 的权限管理与审计日志查看

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在 Taotoken 控制台中如何进行 API Key 的权限管理与审计日志查看 对于团队管理员或项目负责人而言,有效管理 API Key …...

量子机器学习新范式:Classiq如何简化QML模型开发

量子机器学习新范式:Classiq如何简化QML模型开发 【免费下载链接】classiq-models The Classiq Library is the largest collection of quantum algorithms and applications. It is the best way to explore quantum computing software. We welcome community con…...

Linux Mem -- 通过reserved-memory缩减内存

目录 1. reserved-memory缩减内存 2. 为什么要通过2段512MB预留内存实现该缩减呢? 3. reserved-momery中的no-map属性 4. 预留的的内存是否会被统计到系统MemTotal中? 本文是解决具体的一些思考总结,和Linux内核的reserved-memory机制相关。 参考代码:Linux-6.10 1. re…...

如何理解KityMinder脑图编辑器的模块化命令系统设计原理 [特殊字符]

如何理解KityMinder脑图编辑器的模块化命令系统设计原理 🧠 【免费下载链接】kityminder 百度脑图 项目地址: https://gitcode.com/gh_mirrors/ki/kityminder KityMinder是一款由百度FEX团队开发的在线脑图编辑工具,它基于SVG技术实现&#xff0c…...

Front-End-Performance-Checklist错误处理终极指南:10个关键性能监控与异常捕获技巧

Front-End-Performance-Checklist错误处理终极指南:10个关键性能监控与异常捕获技巧 【免费下载链接】Front-End-Performance-Checklist 🎮 The only Front-End Performance Checklist that runs faster than the others 项目地址: https://gitcode.co…...

基于LAMP环境的校园论坛项目

目录 1.配置本地仓库: (1)修改主机名为自己姓名全拼 (2)在 /etc/yum.repo.d/ 目录下新建一个仓库文件yum.repo并编写文件内容 (3)光盘挂载到 /mnt 目录下。 (4)验证是否挂载成功。 2.关闭防火墙和SELinux服务 3.安装PHP环境 分别安装php、php-fpm 、php-mysqln…...

mac 安装指定node版本

我这里使用的是nvm(Node Version Manager)nvm(Node Version Manager)是一个允许你在同一台机器上安装和管理多个Node.js版本的工具。1.安装nvm打开终端,然后运行以下命令来安装nvm:bash:curl -o- https://r…...

1-论面向对象的建模及应用

软件系统建模是软件开发中的重要环节,通过构建软件系统模型可以帮助系统开发人员理解系统,抽取业务过程和管理系统的复杂性,也可以方便各类人员之间的交流。软件系统建模是在系统需求分析和系统实现之间架起的一座桥梁,系统开发人员按照软件系统模型开发出符合设计目标的软…...

Unix架构详细介绍

Unix 是一种具有高度模块化和可扩展性的操作系统,其架构设计使其在多用户和多任务环境中表现出色。以下是 Unix 架构的详细介绍,包括其主要组成部分和功能。Unix 架构的组成部分Unix 的架构通常可以分为以下几个主要部分:内核(Ker…...

nmBot Skills技能仓库解析:AI智能体与Telegram群管机器人的标准化桥梁

1. 项目概述:nmBot Skills 技能仓库深度解析如果你正在开发或使用基于大型语言模型的智能体,并且恰好需要一个功能强大的Telegram群组管理机器人,那么你很可能已经听说过nmBot。今天我们不聊nmBot本身,而是聚焦于一个能极大增强其…...

ARM芯片架构之APB,ATB总线

CoreSight SoC-400 APB Interconnect Components 与 ATB Interconnect Components 技术详解(整理版)1. APB Interconnect Components 1.1 概述 CoreSight 调试基础设施通过 AMBA APB3 协议提供对各调试单元寄存器的统一访问。 APB 互连组件负责&#xff…...

CubiFS容器存储备份与恢复:终极完整指南

CubiFS容器存储备份与恢复:终极完整指南 【免费下载链接】cubefs cloud-native distributed storage 项目地址: https://gitcode.com/gh_mirrors/cu/cubefs 在云原生时代,数据安全性和可靠性是企业级存储系统的生命线。CubiFS容器存储备份与恢复机…...

从零开始一天内完成多个AI模型服务对接的Taotoken效率记录

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 从零开始一天内完成多个AI模型服务对接的Taotoken效率记录 在开发一个需要集成多种AI能力的产品原型时,开发者常常面临…...

全球南方AI治理:本地化微调与规则制定的双轨战略

1. 项目概述:一场静水深流的范式转移最近和几位在跨国科技公司做AI政策研究的朋友聊天,大家不约而同地提到了一个现象:过去一年里,来自印度、巴西、尼日利亚、印度尼西亚等“全球南方”国家的技术团队和智库,在AI治理的…...

分治思想和算法

#例1《快速排序》##include<iostream> using namespace std; void swap(int &a,int &b){//交换函数int ta;ab;bt; return;//void可直接返回 } void quickSort(int a[],int left,int right){//传入数组&#xff0c;左右边界&#xff0c;可拓展为vector容器if(left…...