安装好Clion与CubeMX后,安装openOCD与arm-none-eabi-gcc,并录入系统变量。
openOCD是开源的嵌入式调试与烧录工具,其中包含了仿真器与芯片的相关配置。
arm-none-eabi-gcc是基于GCC的交叉编译器,专门用于编译ARM架构的嵌入式系统。
首先进入Clion,新建一个STM32CubeMX项目。
创建前可能会需要openOCD的目录,将openOCD安装目录下的bin/openocd填入即可。
创建完项目后进入CubeMX,新建一个项目,我们希望使用STM32F103C8T6,通过点亮板载led来进行实验。
在CubeMX中对GPIO与SYS进行配置。
查阅资料得知,板载led连接的是PC13引脚。
对GPIO配置为输出(GPIO_Output),以便点亮led;对SYS配置为Serial Wire,否则只能烧录一次代码。
最后保持项目路径与Clion一致,点击generate code生成代码
回到Clion可以看到根目录中已经有了,进入编辑配置,添加openOCD的配置:
此时界面下方会提示“缺失配置文件”,我们回到根目录新建config文件夹,根据你使用的仿真器类型,在config下新建一个.cfg配置文件。我这里使用的是stlink-v2。代码示例如下:
# choose st-link/j-link/dap-link etc.
#adapter driver cmsis-dap
#transport select swd
source [find interface/stlink-v2.cfg]
transport select hla_swd
source [find target/stm32f1x.cfg]
# download speed = 10MHz
adapter speed 10000
也可以前往openOCD根目录下的share文件夹中寻找示例。
这时我们就可以在Clion中写嵌入式代码了。
进入Core/Src/main.c,这里是项目主程序。
其中已经包含了自动生成的部分代码,包括hal库与系统的初始化、GPIO的初始化。
我们在main函数中的while循环里写入点亮led的代码。
int main(void){HAL_Init(); // HAL初始化SystemClock_Config(); // 系统时钟初始化MX_GPIO_Init(); // 初始化GPIOwhile (1){// --- 点亮 LED (设置 PC13 为低电平) ---HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); // RESET = 低电平HAL_Delay(100); // 停顿100毫秒// --- 熄灭 LED (设置 PC13 为高电平) ---HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET); // SET = 高电平HAL_Delay(100);}
}
准备好我们的开发板与stlink,用杜邦线将其正确连接后,将stlink与电脑连接。
保存后构建并使用openOCD运行,将代码烧录进板子中。按下板子上的复位,led就会开始闪烁,我们的代码已经在开发板上运行了。