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

VScode + PlatformIO 和 Keil 开发 STM32

        以前经常使用 KEIL 写 STM32 的代码,自从使用 VScode 写 ESP32 后感觉 KEIL 的开发环境不美观不智能了,后面学习了 VScode 开发 STM32 。

        使用过程中发现 串口重定向在 KEIL 中可以用,搬到 VScode 后不能用,不用勾选 Use Micro LIB 选型的重定向方法也不能用,不知道为什么了,所以改了文中这种配置,程序在 Keil 和VScode 中都能编译下载,唯一区别 VScode 中烧录不能串口重定向,不过问题不大,也可以使用 hal 库的串口发送接收函数,同样可以实现。

        使用软件:VScode + STM32CubeMX + KEIL,可以在 VScode 中调整代码格式,在 keil 中下载调试。


先前条件

        VScode 下载插件 PlatformIO 开发环境

        修改 VScode 默认编码格式(防止代码在 keil 中中文乱码)

        设置搜索 encod 编码改成 gb2312

        VScode 设置 ctrl + s 格式化代码 (format on save)

        VScode 设置 json 文件

{"cmake.configureOnOpen": true,"cmake.showOptionsMovedNotification": false,"arduino.useArduinoCli": true,"editor.detectIndentation": false, /* 启用时根据文件内容进行重写*/"explorer.confirmDelete": false,"security.workspace.trust.untrustedFiles": "open","C_Cpp.errorSquiggles": "enabled","editor.formatOnSave": true,"terminal.integrated.autoReplies": {},"explorer.confirmDragAndDrop": false,"editor.insertSpaces": false, /* 自动插入空格禁用*/"editor.renderControlCharacters": true, /* 是否显示控制字符:启用*/// "editor.renderWhitespace": "all", /* 显示 4 个空格是.... */"editor.tabSize": 4, /* tab 设置为 4 个空格*/"editor.fontSize": 18, /* 代码字体大小*/"editor.fontFamily": "Monaco, 'Courier New', monospace", /* 代码字体*/"update.mode": "manual","cmake.pinnedCommands": ["workbench.action.tasks.configureTaskRunner","workbench.action.tasks.runTask"],"explorer.confirmPasteNative": false,"files.autoGuessEncoding": true,"debug.console.fontSize": 18,"scm.inputFontSize": 16,"chat.editor.fontSize": 18,"terminal.integrated.fontSize": 16,"files.encoding": "gb2312" /* 设置不自动更新*/
}

 PlatformIO 生成项目工程

        注意自选项目生成位置 ,后面还会在这个位置生成工程

        修改配置文件,删除框选文件夹

[platformio]
include_dir = Inc
src_dir = Src[env:genericSTM32F103C8]
platform = ststm32
board = genericSTM32F103C8
framework = stm32cubeupload_protocol = jlink
upload_speed = 921600debug_tool = jlinkbuild_flags = -Wl,-u,_printf_float	;支持输出小数-Wl,-Map,output.map		;输出map-O0						;编译优先级(0,1,2,3)

STM32cubeMX 生成项目工程

        这里使用 STM32F103C8T6 芯片类型,简单基础配置一下

        调试接口

        选择外部时钟

        串口异步通信

        配置中断

        时钟配置,外部晶振 8M,103的时钟 72M

         生成工程

        点击 “GENERATE CODE” 生成代码


        串口重映射


/* USER CODE BEGIN 1 */#include "stdio.h"#if 1struct __FILE
{int handle;
};
FILE __stdout;void _sys_exit(int x)
{x = x;
}int fputc(int ch, FILE *f)
{HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0x0001);return ch;
}#endif/* USER CODE END 1 */

        这样工程就可以在两个环境中编译使用

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

相关文章:

  • PostgreSQL 练习 ---- psql 新增连接参数
  • pdf翻译软件哪个好用?多语言轻松转
  • 培训第三十天(ansible模块的使用)
  • 关于Log4net的使用记录——无法生成日志文件输出
  • golang Kratos 概念
  • 入门 MySQL 数据库:基础指南
  • 【Hexo系列】【3】使用GitHub自带的自定义域名解析
  • 智能监控,无忧仓储:EasyCVR视频汇聚+AI智能分享技术为药品仓库安全保驾护航
  • 本地创建PyPI镜像
  • 使用 Elasticsearch RestHighLevelClient 进行查询
  • 【jvm】符号引用
  • 征服云端:Java微服务与Docker容器化之旅
  • python 如何实现执行selenium自动化测试用例自动录屏?
  • 03 网络编程 TCP传输控制协议
  • 1. 数据结构——顺序表的主要操作
  • [openSSL]TLS 1.3握手分析
  • 无人机之螺旋桨的安装与维护
  • 手机设备IP地址切换:方法、应用与注意事项
  • 华为HCIP证书好考吗?详解HCIP证书考试难易程度及备考策略!
  • 《SPSS零基础入门教程》学习笔记——05.模型入门
  • 如何用不到一分钟的时间将Excel电子表格转换为应用程序
  • WordPress 中 cURL 请求出现 504 网关超时错误的解决方法
  • 事件和委托的区别
  • 低功耗蓝牙协议栈如何学习?
  • ROS 2中,CMakeList.txt常见语法
  • 使用 prefetchComponents 进行组件预取
  • 『 C++ 』IO流
  • enhanced Input Action IA_Look中Action value引脚没有分割结构体引脚的选项
  • C# NetworkStream、ConcurrentDictionary、Socket类、SerialPort、局域网IP 和广域网IP
  • 大模型--学习范式