最近在咸鱼上买了一块启明欣欣的STM32板子,准备在上面测试open62541和CANopen,到货后如下图,
 
 找商家要了资料,然后运行一个LED灯的实验来简单测试下板子,本文记录一下这个过程。
一 准备
安装Keil 5.35,安装过程很简单,安装完之后自带CMSIS 5.5.0版本,
 
 然后安装对应的pack包,由于芯片是STM32F407ZGT6,故下载对应的F4包,如下,
 
 下载完毕后导入这个包。
然后就是创建工程,这个过程不赘述,网上各种教程,创建完毕之后本人把编译器改为版本5如下,
 
 默认是版本6,但是版本6编译CMSIS时会报warning,网上查了下5和6的区别,6会编译的更快,不过对我来说稳定性比较重要,所以改成版本5
最后是选择runtime环境,即如下按钮,
 
 点击之后进行选择,勾选CMSIS->CORE
 
 勾选Device->Startup和Device->STM32Cube Framework(API) -> Classic,
 在Device->STM32Cube HAL下,勾选Common,Cortex,GPIO,PWR和RCC
 

 最后添加main.c到工程里,这样准备工作就结束了。
由于工程比较简单,所以就没用CubeMX了。
二 代码
本来想使用商家提供的代码,打开一看是很老的代码,CMSIS应该还是3.x的版本,老的接口和新的接口已经不兼容了,于是自己琢磨一下重新编写了,代码如下,
#include "stm32f4xx.h" 
#include "stm32f4xx_hal_gpio.h"
#include "stm32f4xx_hal_rcc_ex.h"
int main(void)
{
    __HAL_RCC_GPIOE_CLK_ENABLE(); // 开启PE的时钟
	__HAL_RCC_GPIOG_CLK_ENABLE(); // 开启PG的时钟
	
	GPIO_InitTypeDef  GPIO_InitStructure;
    GPIO_InitStructure.Pin = GPIO_PIN_3 | GPIO_PIN_4;
    GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;// 输出,push pull模式
    GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
    GPIO_InitStructure.Pull = GPIO_PULLUP; // 上拉
    HAL_GPIO_Init(GPIOE, &GPIO_InitStructure); // 初始化PE3和PE4
	
	GPIO_InitStructure.Pin = GPIO_PIN_9;
	HAL_GPIO_Init(GPIOG, &GPIO_InitStructure); // 初始化PG9
	
	HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3 | GPIO_PIN_4, GPIO_PIN_RESET); // 让PE3和PE4输出低电平,可以点亮LED
	HAL_GPIO_WritePin(GPIOG, GPIO_PIN_9, GPIO_PIN_RESET); // 让PG9输出低,可以点亮LED
	while (1)
	{
		// 延时 ~0.5s
		for(uint32_t i = 0; i < 2000; ++i)
		{
			for(uint32_t j = 0; j < 1000; ++j);
		}
		// 翻转PE3、PE4和PG9的电平
		HAL_GPIO_TogglePin(GPIOG, GPIO_PIN_9);
		HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_3);
		HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_4);
	}
}
 
编译后使用STLink下载到板子里,复位后运行,发现三个LED灯可以闪烁了。



















