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

新建工程2

我们把stm32最小开发板和stlink链接好后,开始进入keil。

  • 打开魔术棒按钮选择debug,这个调试器默认为ulink。所以我们改为stlink debug。
  • 然后点击旁边的setting按钮,在flash Download里把reset and run这一项勾上。(勾上这项后,我们下载程序后会立马复位并执行,这样方便一些。否则每次下载后还需要按上板子的复位按键才能执行程序。)
  • 接下来点击确认ok。然后咱们再编译一次。然后点击编译旁边的load。如果此时灯不闪了就可以了。

接下来我们配置三个寄存器进行点灯:

我们可以打开stm32的参考手册。

  • 首先是rcc的一个寄存器来使能gpioc的时钟。
  • GpIo都是apb2的外设。我们在参考文档中打开7.3.7apb2外设时钟使能寄存器。然后就能看到一个IOPCEN,这一位就是使能G PIOC的时钟的。这位写1就是打开GPIOC的时钟,写0就是关闭时钟。
  • 此时我们把第四位写为一
  • 二进制转换成16进制即为四个为一组。00000010。

然后我们回到软件keil

在while死循环之前,写上rcc的APB2EDR寄存器等于0x00000010。这样就打开了GPIOC的时钟。


然后是第二个寄存器,我们需要配置一下PC13口的模式。

  • 我们在参考手册中可以找到8.2.2端口配置高寄存器gpiox_crh。
  • 这里面这个x是从a到e任意一个。
  • 里面的CNF13和mode13就是用来配置13号口的。
  • 首先cnf我们需要配置为通用推挽输出模式。mode配置为输出模式。
  • 此时16进制为0x00300000。

停下来我们就可以给PC13口输出数据了。

  • 我们可以看到8.2.4端口输出数据寄存器GPIOX_ODR里有一位ODR13,这一位写1,13号口就是高电平,写0就是低电平。
  • 如果写1,odr的值就是00002000。
  • 因为这个灯是低电平点亮的,所以我们给odr全为零就是点亮。那么给odr这个值就是灭。

这种操作需要我们不断的查找,参考手册里寄存器的每一位都是干嘛的。很麻烦。


接下来我们就添加库函数,看看库函数和寄存器的操作方式有哪些区别。

  1. 我们打开工程文件夹2-1,然后在里面新建一个文件夹叫做library,用来放库函数。
  2. 接着打开固件库的文件夹,打开libraries,stm32标准外设驱动(英文版),src。然后在src里面就是库函数的源文件。

misc是内核的库函数,其他的就是内核外的外设库函数了。

  1. 按ctrl a全选,然后复制。粘贴到刚才新建的的library文件夹中。
  2. 接下来再打开src上面的inc文件夹。这里面是库函数的头文件。我们把他们也全复制,粘贴到library文件夹里。
  3. 接下来打开keil软件,然后右键target1添加新的组,改名字叫library。
  4. 右键这个新组,添加已经存在的文件,打开library, ctrlA ,add。

但是对于这个函数来说还不能直接使用,我们需要再添加一个文件。

  • 我们打开固态库文件夹,打开project-> stm32f10x……template。
  • 可以看到tm32f10x_conf.h和两个It结尾的文件。
  • 这里的conf(Configuration)文件是用来配置库函数头文件的包含关系的。里面还有用来参数检查的函数定义,这是所有函数都需要的。
  • It(interrupt)文件是用来存放中断函数的。
  1. 我们将这三个文件复制下来,粘贴到工程的User文件夹里。
  2. 接着回到kill软件,给user组里添加上这三个文件。
  3. 最后需要一个宏定义,我们可以在main函数里的头文件右键打开文件。

接着我们滑到最下面8296行那里,有一个条件编译的if语句。(意思是如果你定义了use_stdperiph_driver这个字符串,下面这个include conf.h语句才有效。)

  • 所以我们需要复制一下这个字符串。
  • 打开魔术棒。在c或c++里的define栏粘贴字符串(这样才能包含标准外设库,也就是库函数。)
  • 当然,下面的头文件路径include paths也不要忘了添加User和library的目录的路径。

这样基于库函数的工程就建好了。

然后我们再进行点灯操作。

  1. 首先把刚才的基于寄存器的那三句删掉。
  2. 然后我们开启使能时钟,库函数里有一句函数可以开启。叫做rcc_apb2periPhclockcmd,然后里面提示有两个参数,一个是选择外设,一个是选择新的状态。
  3. 我们右键跳的函数定义上面有函数的简介和参数说明。
  4. 将这个gpioc直接复制粘贴作为第一个参数。
  5. 第二个参数咱们设置为enable使能。这样gpioc的外设时钟就配备好了。
  • 第二步是配置端口模式。
  1. 我们需要用到gpio _Init这个函数。
  2. 也是两个参数,一个是选择哪个gpio,一个是参数的结构体。
  3. 第一个我们可以选择A到G。但是我们是PC13口的LED,所以第一个参数就是gpi oC。
  4. 第二个是Gpio_InitTypeDef的结构体。我们需要先定义一个结构体。结构体的名字可以随便起,根据官方推荐我们可以起gpio_initstructure。
  5. 然后我们把结构体的每个参数填上。复制粘贴这个名字,用.来引出参数。分别有模式MODE,端口PIN,速度SPEED三种。
  6. 我们右键转到模式MODE的定义。里面显示这个值可以是GPIOMode_TypeDef里都一个值。(此时这是一个注释,无法跳转。我们可以用ctrl+F搜索一下这个定义的位置。)
  7. find next之后我们可以看到这是一个枚举。而mode就是这里的其中一个值。
  8. 我们选择out pp这一项复制,这个就是通用推挽输出。
  9. 然后在主函数里写上。
  • 接下来是第二个pin
http://www.jsqmd.com/news/675439/

相关文章:

  • 智慧树刷课插件终极指南:如何3步实现视频自动化学习,效率翻倍![特殊字符]
  • 突破微信单设备限制:WeChatPad技术原理与实现深度解析
  • 2026空气炸锅哪个品牌质量比较好?真实体验与口碑分析 - 品牌排行榜
  • React 请求取消协议:利用 AbortController 在 React 组件卸载时自动中止待处理网络请求
  • 基于 YOLOv11 的无人机航拍小目标检测系统 基于 YOLOv11 的无人机小目标检测系统,基于 VisDrone 2019 数据集,实现从模型训练、验证、推理到 PyQt6 桌面应用的完整流程。
  • Phi-3-mini-4k-instruct-gguf多场景应用:写邮件/解题/写SQL/生成测试用例实战演示
  • 2026年展会展台设计策划公司推荐,靠谱品牌等你选 - mypinpai
  • Bidili Generator效果对比:不同LoRA强度下风格迁移的真实案例展示
  • 通过复制粘贴,就可以写出优秀的提示词
  • 分钟搞懂深度学习AI:实操篇:VGG
  • Golang怎么实现跳表数据结构_Golang如何用Skip List实现有序数据的快速查找【方法】
  • g4f给出JavaScript调用的例子代码,让用户只要能点开网页,就能用ai
  • 分享资质齐全的美术集训画室机构,口碑不错的画室价格多少钱 - 工业推荐榜
  • NaViL-9B企业落地实践:金融文档OCR理解+摘要生成全流程
  • 深聊美术集训实力机构怎么收费,推荐靠谱的画室公司 - myqiye
  • 细聊深圳艾克斯振动盘,维修成本及行业口碑排名究竟怎样 - mypinpai
  • TLPI 第9章 读书笔记:Process Credentials
  • 8.原理图为什么看不到具体的电路(比如STM32的晶振等)
  • 【大模型应用开发】—— Context Engineering:从提示词到上下文工程:LLM应用落地的核心思维跃迁
  • 2026市面上比较实用的互联网行业证书。
  • React 与 GraphQL 碎片(Fragments):利用数据局部性原则优化组件级数据的声明式获取
  • Windows右键菜单终极清理指南:用ContextMenuManager告别菜单臃肿
  • PRD文档中生成符合技术规范和业务逻辑的图表
  • RoadDefectNet 系统采用前后端分离架构,结合了计算机视觉(YOLO)与Web 业务逻辑(Django + Vue3) 智慧交通道-路缺陷检测系统 Django+Vue3 巡检维修管理平台
  • 知识图谱(BILSTM+CRF项目完整实现)【第六章】
  • nli-MiniLM2-L6-H768参数详解:Position Embedding截断长度对长句NLI的影响实测
  • WeChatPad终极指南:3步破解微信平板模式限制,实现安卓多设备登录
  • 传统 on-call 的 5 个致命问题——从人肉值班到 AI Agent 自动排障
  • 学习记录 健脾祛湿方收集
  • vulhub系列-73-RA1NXing Bots(超详细)