STM32F407开发板支持以MDK进行开发,本人所用的以前安装的版本MDK5.25,然后安装了最新版本的支持包2.17.0,这样就可以在芯片列表中查看到STM32F407的身影,见图1所示。
图1 完成支持包安装
在安装完成官方提供的例程后,打开相关例程即可进入编辑界面,见图2所示。
图2 编辑界面
经编译其结果如图3所示,可生成相应的目标文件。
图3 完成编译
为便于下载调试,这里所使用的是外观的调试工具,见图4所示。对调试工具的设置如图5和图6所示。
图4 连接调试工具
相应的连接关系为:
DIO---PA13
CLK---PA14
图5 设置调试工具
图6 完成调试工具连接
对开发板的烧录算法选择见图7所示,下载后其结果如图8所示。
图7 烧录算法选取
图8 完成下载
为LED的控制程序为例,其程序内容为:
void led_init(void);
int main(void)
{
HAL_Init();
sys_stm32_clock_init(336, 8, 2, 7);
delay_init(168);
led_init();
while(1)
{
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10,GPIO_PIN_SET);
delay_ms(500);
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10,GPIO_PIN_RESET);
delay_ms(500);
}
}
void led_init(void)
{
GPIO_InitTypeDef gpio_init_struct;
__HAL_RCC_GPIOF_CLK_ENABLE();
gpio_init_struct.Pin = GPIO_PIN_9;
gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP;
gpio_init_struct.Pull = GPIO_PULLUP;
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOF, &gpio_init_struct);
gpio_init_struct.Pin = GPIO_PIN_10;
HAL_GPIO_Init(GPIOF, &gpio_init_struct);
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10, GPIO_PIN_SET);
}
LED的电路如图9所示,由此可知它是通过向PF9和PF10输出高低电平来控制LED灯的亮灭。
图9 LED电路
KEY的电路如图10所示,可以通过读取PE2和PE3的状态来控制LED灯的亮灭。
图10 KEY电路
对KEY的初始化函数为:
void key_init(void)
{
GPIO_InitTypeDef gpio_init_struct;
__HAL_RCC_GPIOE_CLK_ENABLE();
gpio_init_struct.Pin = GPIO_PIN_2;
gpio_init_struct.Mode = GPIO_MODE_INPUT;
gpio_init_struct.Pull = GPIO_PULLUP;
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOE, &gpio_init_struct);
gpio_init_struct.Pin = GPIO_PIN_3;
HAL_GPIO_Init(GPIOE, &gpio_init_struct);
}
以KEY控制LED的主程序为:
int main(void)
{
HAL_Init();
sys_stm32_clock_init(336, 8, 2, 7);
delay_init(168);
led_init();
key_init();
while(1)
{
if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_2)==GPIO_PIN_RESET)
{ HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_RESET);
}
else
{
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_SET);
}
if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_3)==GPIO_PIN_RESET)
{
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10,GPIO_PIN_RESET);
}
else
{ HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10,GPIO_PIN_SET);
}
}
}
经程序的编译和下载,即可见到正确的控制效果。以此为基础,后面的任务是解决显示屏的显示驱动问题。