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

从零开始点亮一个LED灯 —— keil下载、新建工程、版本烧录、面包板使用、实例代码

一、keil下载

参考视频:Keil5安装教程视频 (全套资料+51和32皆可用Keil5编译设置)_哔哩哔哩_bilibili

视频内容包括下载链接、安装教程、库导入,非常详细!

二、新建工程

2.1.使用stm32CubeMX新建工程

10. 使用STM32CubeMX新建工程 — [野火]STM32 HAL库开发实战指南—基于F103-MINI 文档

2.2.手动新建工程

在Keil MDK 5里面直接创建使用HAL库的STM32工程的方法(不使用STM32CubeMX)_hal库开发必须用cubemax吗-CSDN博客

这里我为了练手尝试了手动创建工程,遇到的问题及解决如下:

问题解决
重定义  Symbol HAL_InitTick multiply defined

两种选择:

1.把重定义代码的其中一份注释掉

2.把其中一份文件删除(要确保两个文件功能绝对重复,或者不会再使用)

“xxxx.h“ file not found’Project -> Option->C/C++->Include Paths,添加提示缺失的文件所在路径
"asm" function is nonstandard在Project -> Target Option --C/C++中取消strict ANSI  C选项
Please select first the target STM32F1xx device used in your application  Project -> Target Option -> C/C++ -- Define一栏中添加提示错误对应的宏定义
"LSI_STARTUP_TIME" is undefined官方的HAL库可能有多个版本,找一个有该宏定义的版本(取尽可能接近当前版本的文件)替换相应文件即可

三、stlinkv2使用

3.1.驱动下载和烧录器固件更新

ST-Link驱动的下载、安装、配置,以及ST-Link固件的升级_stlink驱动-CSDN博客

这篇文章写的很清楚,注意每个步骤都不能漏!我一开始以为下载了官网最新驱动就不需要下载驱动升级,结果stlink连接失败。(推测这个驱动升级是把驱动升级到stlink固件里,而不是升级PC端的驱动)

3.2.烧录器连线

8. stm32最小系统板与stlink调试器之间的接线_哔哩哔哩_bilibili

这个视频详细但也啰嗦,对自己连线不自信的时候可以仔细比对视频的做法。

四、面包板的使用

基础的使用这个视频讲的很详细 电子电路入门:面包板保姆级使用教程_哔哩哔哩_bilibili

五、LED电路与代码

直接上图,讲我的电路接法。

开发板有STLINK供电,需要将开发板的3.3V和GND连接到面包板的公共正极和公共负极,以给其他器件供电,这里LED的阳极插在面包板的公共正极,阴极插在PA0引脚上,通过控制PA0的电平高低,决定LED的亮灭。

下面是实例代码:

#include "stm32f1xx_hal_gpio.h"
#include "stm32f1xx_hal_rcc.h"
#include "stm32f1xx_hal.h"
#include "main.h"/* LED GPIO配置宏定义 */
#define LED_GPIO_PORT   GPIOA
#define LED_GPIO_MODE   GPIO_MODE_OUTPUT_PP
#define LED_GPIO_PIN    GPIO_PIN_0
#define LED_GPIO_PULL   GPIO_PULLUP
#define LED_GPIO_SPEED  GPIO_SPEED_FREQ_HIGH/* GPIO初始化函数 */
void GpioInit(void)
{GPIO_InitTypeDef tGpioInit;// 使能GPIOA时钟__HAL_RCC_GPIOA_CLK_ENABLE();// 推挽输出模式, 既可以输出高电平也可以输出低电平tGpioInit.Mode  = LED_GPIO_MODE;tGpioInit.Pull  = LED_GPIO_PULL;tGpioInit.Speed = LED_GPIO_SPEED;tGpioInit.Pin = LED_GPIO_PIN;HAL_GPIO_Init(LED_GPIO_PORT, &tGpioInit);return ;
}/* LED闪烁 */
void ToggleTestLed(void)
{HAL_GPIO_TogglePin(LED_GPIO_PORT, LED_GPIO_PIN);HAL_Delay(20);
}/* 主函数 */
int main(void)
{GpioInit();while (1){ToggleTestLed();}}

http://www.lryc.cn/news/474470.html

相关文章:

  • [pdf,epub]105页《分析模式》漫谈合集01
  • 计算机网络5层模型
  • Python毕业设计选题:基于Python的无人超市管理系统-flask+vue
  • WindowsDocker安装到D盘,C盘太占用空间了。
  • Java面试经典 150 题.P80. 删除有序数组中的重复项 II(004)
  • 【Three.js】SpriteMaterial 加载图片泛白,和原图片不一致
  • 了解神经网络中的激活函数
  • 配置BGP与IGP交互和路由自动聚合示例
  • 代码随想录算法训练营第三十三天 | 62.不同路径 63.不同路径
  • 使用Flask构建RESTful API
  • 基于springboot的Java学习论坛平台
  • Python离线环境搭建
  • windows下kafka使用出现的问题
  • ctfshow文件包含web78~81
  • 鸿蒙生态认识
  • Hadoop-004-Big Data Tools插件的使用
  • linux8在线扩容/home目录
  • 【C/C++】模拟实现strcpy
  • 网络编程番外——IO多路复用的应用说明
  • 【Java爬虫的淘宝寻宝记】—— 淘宝商品类目的“藏宝图”
  • 探索Python文档自动化的奥秘:揭开docxtpl库的神秘面纱
  • RabbitMQ的解耦、异步、削峰是什么?
  • 4:arm汇编语言4:bits/byte的介绍(ASCII码)与二进制补位
  • C++实现仿安卓线程Handler、Message、Looper的功能
  • 构建安全的用户登录API:从请求验证到JWT令牌生成
  • 状态模式:封装对象状态并改变行为的设计模式
  • 备战“双11”丨AI+物流:你的快递会有什么变化?
  • 理解为什么要有C++设计模式
  • 模式匹配类型
  • 每天10个vue面试题(七)