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

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

  • 1、准备的软件
  • 2、配置CLion
  • 3、在CLion中创建STM32工程
  • 4、烧录程序 & 在线调试
  • 5、其他问题
  • 1、准备的软件

    (1)clion: 链接:https://www.jetbrains.com.cn/clion/
    破解:方法可在某宝上去找。
    (2)STM32CubeMX与ST_Link: 链接:https://www.st.com.cn/content/st_com/zh/stm32cubemx.html
    Alt
    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文件过大报错,之后我会继续找解决办法。

    作者:小欧不要怂

    物联沃分享整理
    物联沃-IOTWORD物联网 » MAC下使用Clion软件进行STM32的HAL库的开发

    发表回复