MAC下使用Clion软件进行STM32的HAL库的开发

news/2024/11/13 10:12:47/文章来源:https://www.cnblogs.com/jiatai-blogs/p/18537861

1、准备的软件

(1)clion: 链接:https://www.jetbrains.com.cn/clion/
破解:方法可在某宝上去找。
(2)STM32CubeMX与ST_Link: 链接:https://www.st.com.cn/content/st_com/zh/stm32cubemx.html
破解:免费使用

mac电脑在安装的时候会出现上面的界面,依次安装即可。
(3)macOS的包管理器‌brew:打开终端输入:
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
(4)开放芯片调试器 OpenOCD:

brew install open-ocd
//输入以下命令显示版本号代表已安装成功
openocd -v

默认安装在/usr/local/Cellar/open-ocd/
(5)交叉编译工具链arm-none-eabi-gcc:
brew install --cask gcc-arm-embedded
以下命令显示版本号说明安装成功

arm-none-eabi-gcc -v
arm-none-eabi-gdb -v

(6)建议装个MAC软件商店的XCode。

2、配置CLion

打开Clion中的设置

选择在构建、执行、部署选项中查看工具链的设置。一般情况下,CLion会在默认中自动配置好环境,找的到C和C++的编译器。

我在这里直接寻找到C和C++的编译器所在的位置。

与window系统不同的是,这里不需要进行MinGW环境的配置。
然后再CMake栏下确认一下工具链是否正确:

至此CLion环境配置完成,可以创建STM32项目了。

3、在CLion中创建STM32工程

(1)创建CLion工程
打开CLion,点击新建项目,会出现以下界面。
img
选择stm32cunbemax,在桌面上新建个文件夹demo,之后所有的工程文件都保存在此文件夹中。
点击创建,demo文件中会生成一个.ioc文件,点击.ioc文件,会出现如下内容。
img
双击通过图中箭头所指的(通过说stm32cubemx),系统会自动打开stm32cubemx这个程序。
这里默认选中的芯片型号是STM32F030F4Px,可以在CubeMX中重新选择自己需要的芯片,一切操作都和使用Keil开发没有区别。
选择stm32f103c8t6芯片,可通过图形化界面配置所需的功能。本文配置引脚PC13输出以及串口1。
img
img
img
img
stm32f103c8t6的时钟树的配置如下:
img
最需注意的是,就是在下面的设置中项目名称一定要和在CLion中建立的一致,这样生成的工程文件才会覆盖Clion中的文件,否则会另外生成一个文件夹,Clion就无法读取了。
img
img
每次修改完点软件右上角的Generate之后,会自动出现弹窗,选择yes
img
之后会出现以下弹窗:
img
弹窗直接点Close,Clion里面会自动更新文件。
打开后台运行的CLion,开始的界面里会出现一个配置文件的小窗口
img
选择配置文件中stm32f1,之后点击复制到项目并使用。
Cmake会自动编译工程,在CLion底栏的CMake选项卡中如果没有提示错误,说明工程配置就没问题了
img
若CMake没有自动编译,且CLion底栏的CMake选项卡没有任何消息,左侧文件里没有出现camke-bulid-debug。将CLion重启,可能解决此问题。
顶栏右部的这三个图标分别是编译、下载、调试:
img
点击编译,CLion底栏的消息选项卡可以看到编译输出。
img

4、烧录程序 & 在线调试

在左侧文件夹里打开stm32f103c8_blue_pill.cfg文件,将里面的内容替换为

source [find interface/stlink.cfg]
transport select hla_swd
source [find target/stm32f1x.cfg]
adapter speed 10000

之后选择编辑配置
img
在弹出的界面添加新配置,选择OpenOCD
img
在OpenOCD配置文件中,可执行的二进制文件,选择Cmake编译后的二进制文件;面板文件选择,demo文件夹里的stm32f103c8_blue_pill.cfg文件。配置结果如下所示:
img
设置好配置文件之后,就可以点击下载或者调试按钮进行下载和在线调试了。
最后说明一下,CLion中组织编译规则都是基于CMakeLists.txt文件的,若要再新建的文件夹添加.c和.h文件,那么在CMakeLists.txt文件里面添加源码目录和include文件夹的路径就行了:
img

5、其他问题

printf重定向问题
在Keil里面为了使用printf函数我们需要重定向fputc函数:

int fputc (int ch, FILE *f)
{(void)HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 1000);return ch;
}

其中的FILE定义在stdio.h头文件中,所以需要在项目中包含这个头文件,但是经过测试发现,Keil里面包含的是MDK\ARM\ARMCC\include这个目录下的stdio.h,而在Clion中是不会链接到这个文件的。因此如果在Clion中也按之前的方法进行重定向,会发现printf没有任何输出。
在Clion中链接的是/ Applications/ ArmGNUToolchain/ 13.3.rel1/ arm-none-eabi/ arm-none-eabi/ include/ stdio. h里面的stdio.h,如果仍然想使用printf函数功能,则需要在文件usart.c添加如下程序:

//redirect _read to huart1,necessary for scanf、getchar
int _read(int file, char *ptr, int len)
{/* receive data from serial huart1 */HAL_UART_Receive(&huart1, ptr, len,1000);return (len);
}//redirect _write to huart1,necessary for printf
int _write(int file, char *ptr, int len)
{/* send data to serial huart1 */HAL_UART_Transmit(&huart1, ptr, len, 1000);return len;
}

但值得注意的是只能使用printf函数来输出串口数据,但scanf函数在stm32f103c8t6中运行还是有问题,会出现FLASH文件过大报错,之后我会继续找解决办法。

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

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

相关文章

2024-2025-1 20241314 《计算机基础与程序设计》第七周学习总结

2024-2025-1 20241314 《计算机基础与程序设计》第七周学习总结 作业信息这个作业属于哪个课程 <班级的链接>2024-2025-1-计算机基础与程序设计这个作业要求在哪里 2024-2025-1计算机基础与程序设计第七周作业这个作业的目标 数组与链表 基于数组和基于链表实现数据结构…

二进制和格雷码转换

二进制和格雷码转换 二进制转为格雷码//根据二进制转换成格雷码的法则,可以得到以下的代码: static unsigned int DecimaltoGray(unsigned int x) {return x^(x>>1); }//以上代码实现了unsigned int型数据到格雷码的转换,最高可转换32位自然二进制码,超出32位将溢出。…

在鸿蒙NEXT中开发一个2048小游戏

本项目是基于api12开发的2048游戏,游戏的逻辑是当用户向某个方向滑动时,将该方向相邻且相等的数字相加,同时在空白区域的随机位置生成一个随机数字。游戏中的数字越大,分数越高。首先,游戏的界面布局分别采用两个网格组件Grid来实现,难点在于上方的菜单栏是不均等的三种尺…

nginx 整体架构

Nginx 是什么 Nginx 是一款 C 语言编写高性能 Web 服务器,反向代理服务器。占用内存少、并发能力强 使用场景 nginx主要有以下 4 个使用场景作为 Http 服务器,可以提供静态网页和静态资源的访问 HTTP代理缓存,缓存服务端请求数据 作为反向代理服务器,将请求代理转发 作为负…

[CISCN2019 华北赛区 Day2 Web1]Hack World 1

[CISCN2019 华北赛区 Day2 Web1]Hack World 1 打开实例发现是个POST注入框盲猜SQL注入,万能密码检测无果,而且经过测试存在大量sql关键字过滤尝试使用(),出现了bool(false),确定这是一道布尔注入题and被禁用,决定采用异或^注入 构建payload脚本梭哈:成功获得flag:flag{a2…

2024 AH CSP-S 迷惑行为大赏

洛谷专栏阅读:https://www.luogu.com.cn/article/0atx674s 一、概述 观前提示:本届CSP-S安徽省整活相较于其他省份不是那么“群英荟萃”,观看前请不要小零食(?) 本届CSP-S安徽共有1013人参赛,其中有效准考证号源文件夹共有1006个,7人因为种种原因最终没有留下任何参赛痕…

LeNet-5卷积神经网络的实现与改进-实验报告

摘要 在本次实验中,我实现了LeNet-5卷积神经网络模型的构建与训练,以实现图像分类任务。主模型采用Pytorch框架搭建,模型识别准确率达到了87%,体现了较好的分类效果。除此之外,我还尝试使用C++实现模型的底层核心操作,包括卷积、池化及全连接等,但最终准确率较低,未达预…

【Mplus 8.7软件下载与安装教程】

1、安装包 Mplus 8.7: 链接:https://pan.quark.cn/s/128e81c51dbe 提取码:1X7B Mplus 8.3: 链接:https://pan.quark.cn/s/5ea5ff583480 提取码:Vdjt Mplus 7.4: 链接:https://pan.quark.cn/s/414ec0c8cb14 提取码:8jhm 2、安装教程 1) 双击Mplus8.7 Demo(64-bi…

Day13 备战CCF-CSP练习

202312-3Day 13 题目描述 题目分析 大模拟,用栈储存每一个多项式,最后根据导数的加法原则依次求导相加,注意取模。 C++代码 #pragma GCC optimize(3, "Ofast", "inline") #include <bits/stdc++.h> #define int long longusing namespace std; co…

OOP实验三

任务1: 源码:1 #pragma once2 3 #include <iostream>4 #include <string>5 6 using std::string;7 using std::cout;8 9 // 按钮类 10 class Button { 11 public: 12 Button(const string &text); 13 string get_label() const; 14 void click()…

鸿蒙NEXT开发案例:转盘1W

【1】引言(完整代码在最后面) 在鸿蒙NEXT系统中,开发一个有趣且实用的转盘应用不仅可以提升用户体验,还能展示鸿蒙系统的强大功能。本文将详细介绍如何使用鸿蒙NEXT系统开发一个转盘应用,涵盖从组件定义到用户交互的完整过程。 【2】环境准备 电脑系统:windows 10 开发工…

开源 - Ideal库 - 常用时间转换扩展方法(二)Qv

合集 - Ideal库 - Common库(2)1.开源 - Ideal库 - 常用时间转换扩展方法(一)11-07:悠兔机场2.开源 - Ideal库 - 常用时间转换扩展方法(二)11-09收起 书接上回,我们继续来分享一些关于时间转换的常用扩展方法。01、时间转日期时间 TimeOnly 该方式是把TimeOnly类型转为Date…