文章目录
- 运用Cube进行外设的设置
- 编写代码
- 烧录
- 一些c语言运用规范
- 参考资料
运用Cube进行外设的设置
打开STM32CubeMX
在旁边进行外设配置(pinout&configuration)
system core中
sys打开debug中的serial wire 配置调试界面(下载程序)
rcc打开high speed clock选择cystal/ceramic resonator 选择外部晶振
clock configuration中设置时钟树
参照开发板的原理图进行设置,先找到时钟源(即晶振)
从图中找到其参数
开发c板的晶振是12兆
因此要在input frequency里设置为12MHz
然后把选项切换到hse上
把选项切换到pllclk上
芯片的最大工作频率为168MHz
因此在HCLK那里输入168后敲回车,系统会自动进行配置
配置好时钟树之后,如果我们要点亮一个LED灯就需要在芯片手册中查找LED灯的引脚
图中的LED_B代表蓝灯,同理LED_G代表绿灯,LED_R代表红灯
找到LED_R,同时到另一个图中找到LED_R,表示与另一个图中同样的地方相连
可以看到这个LED_R连接的是PH12引脚
找到外设对应的引脚后回到cube界面,在pinout view中找到引脚PH12(可以用下方的搜索框进行检索)
点击后在下拉菜单中选择GPIO_Output
这样工程的外设就配置完成了然后就可以在project manager中进行工程的命名(用全英文)以及位置路径的设置
最后点击GENERATE CODE自动生成代码(注意在Toolchain/IDE中的选项要选择与编译器一致的选项)
这边用的是keil5,因此选择MDK-ARM
编写代码
在文件夹中打开MDK-ARM文件夹
打开绿色图标文件
打开主代码main.c
其中
这里主要进行时钟配置
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
这里进行了GPIO的初试化
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
whlie(1)是单片机的主循环,单片机的程序一般在whlie(1)中进行
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
注意写代码时,在cube自动生成的中,我们编写的代码只有写在
/* USER CODE BEGIN 3 */
/* USER CODE END 3 */
这个注释中间才会生效
点亮LED灯的代码如下:
HAL_GPIO_TogglePin(GPIOH,GPIO_PIN_12);//翻转PH12的电平
HAL_Delay(300); //每300ms翻转一次电平
HAL_GPIO_TogglePin()这个函数的作用是翻转引脚的电平
HAL_Delay()这个函数可以做到延时的功能,就是让程序暂停执行
具体的函数定义可以查找hal库文件
对每个函数都进行了解释。
写好之后就可以进行编译。
烧录
我使用的是比较老的一个软件“STM32 ST-LINK Utility”
打开后界面如下
在烧录之前要把板子连接好(即接线),可以参考开发板的用户手册进行接线
先点击上面的“插头”进行连接,连接成功的界面如下:
然后点击上面的File,打开工程中的.hex文件
打开后点击上面栏的Target->Program
完成烧录。
一些c语言运用规范
尽量不要使用int,char和long这样的数据类型,在include"stdint.h"之后即可使用(HAL库已包含):
- uintxx_t xx位无符号整型
- intxx_t xx位有符号整型
- floatxx_t xx位浮点数
尽量使用以上的类型定义变量
参考资料
CH1.1 GPIO 第1讲 建立第一个工程【南工骁鹰嵌入式软件培训】
STM32 ST-LINK烧写hex文件方法
ST-LINK/V2 烧录固件