本博客中示例代码下载路径: https://github.com/maziot-stm32/A1/releases/tag/v0.2
准备工作
根据自己PC的操作系统预先下载并安装好 STM32CubeIDE 和 STM32CubeProg 工具.
下载链接:
新建工程
step1. 新建工程 File >>> New >>> STM32 Project
step2. 使用搜索功能快速找到mcu型号
step3. 设置工程名, 也可以选择工程的保存位置, 以及配置工程选项
step4. 配置STM32资源
工程创建结束后进入到可视化配置界面, 如下图:
启用SW调试接口, 这一步很关键, 没有启用将导致STM32无法下载程序
启用外部时钟源
配置时钟树
CTRL+S, 保存工程, 至此工程就建立好了.
点灯程序
工程建立好, 写个最简单的点灯 demo 程序, 验证下编译和烧写的步骤. 这里使用 STM32F103RC 最小系统板进行验证.
第一步是要看原理图, 确认LED灯接在哪个GPIO上.
原理图代码仓库: https://github.com/maziot-stm32/A1.Resource
确认到 LED 连接在 PA8 和 PD2 引脚上. 因此在工程中main.c(位于Core/Src目录下)文件中增加以下测试代码:
#define LED0_Pin GPIO_PIN_8
#define LED0_GPIO_Port GPIOA
#define LED1_Pin GPIO_PIN_2
#define LED1_GPIO_Port GPIOD
#define LED_ON GPIO_PIN_RESET
#define LED_OFF GPIO_PIN_SET
/**
* @brief Init led
* @retval None
*/
void led_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
/*Configure GPIO pin : LED0_Pin */
GPIO_InitStruct.Pin = LED0_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(LED0_GPIO_Port, &GPIO_InitStruct);
/*Configure GPIO pin : LED1_Pin */
GPIO_InitStruct.Pin = LED1_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(LED1_GPIO_Port, &GPIO_InitStruct);
}
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
led_init();
while (1)
{
HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, LED_ON);
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, LED_ON);
HAL_Delay(200);
HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, LED_OFF);
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, LED_OFF);
HAL_Delay(200);
}
}
进行编译, 编译成功后将生成 A1.elf 文件.
烧写验证
通过 STM32CubeProg + ST-LINK 烧写 A1.elf 文件到硬件设备上. 烧写配置如下:
通过 CoFlash + CMSIS-DAP 烧写 A1.elf 文件到硬件设备上. 烧写配置如下:
烧写结束后, 将看到硬件设备上两个 LED 循环闪烁. 至此, 新建工程并简单验证OK.