相信大多是硬件工程师的第一个程序都是使用IO口点灯,就像程序员的第一个程序都是Hello world一样。本篇文章将详细的介绍使用STM32CubeMx生成工程并使用GPIO,包括基本的输入输出、中断等的使用。前期准备: STM32硬件电路板及仿真器(本篇以STM32F072C8单片机为例) Keil v5以上版本(MDK-ARM)
系统配置然后配置调试接口为SWD模式,系统时基为Systick定时器,如下图所示。Systick初始化时会自动打开中断(最低优先级),定时周期为1ms。
o4wqpmgayi464048947042.jpg
GPIO配置
配置GPIO时,直接点击右侧相应的引脚,在弹出菜单中选择相应的功能,输入还是输出等,本例中配置了PA0、PA1、PA2三个端口,分别配置为输出模式、输入模式和外部中断模式。配置完成后可在中间区域对每个IO进行详细配置,包括端口初始电平,输出模式是推挽输出还是开漏输出,输入上下拉选择,端口速度以及端口标签。如下图所示。本例中PA0配置为推挽输出模式,用于控制LED,PA1配置为上拉输入模式,用于检测按键KEY1,PA2配置为外部中断模式,下降沿中断,用于检测按键KEY2。
00fqugetg3064048947142.jpg
端口配置为外部中断后,需要在NVIC配置中打开相应的中断才能正常使用,如下图所示。可以看到System tick中断是默认打开的。
smyzz1kfbvj64048947242.jpg
时钟配置
首先按照上篇文章的介绍新建工程,之后配置系统时钟,本例中选择外部高速时钟HSE作为系统时钟,需要配置RCC如下图,配置后相应的引脚显示为时钟模式。
kmoy0rvqdsa64048947342.jpg
配置完成后再Clock Configuration页面进一步配置时钟,首先输入外部时钟的频率,然后依次选择时钟源以及分频、倍频系数。本例外部时钟为8MHz,最终配置系统时钟为48MHz。当配置出现问题时,软件会标红提示。
xu3pf4bpryq64048947442.jpg
xsvpf22tjy164048947542.jpg
所有配置完成后即可生成工程,可以看到时钟和GPIO初始化已经有软件生成,用户只要编写自己的程序就行。普通IO操作比较简单,直接调用相关函数即可,如下图。
teuys5ulku364048947643.jpg
外部中断的使用相对复杂一些,需要用户自己编写回调函数,在stm32f0xx_it.c文件中,可以看到,中断函数已经定义好。
wiwf3mx0wly64048947743.png
tp31y2okcgs64048947843.png
中断程序最终调用的是void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)函数,该函数已经由系统生成,但内容为空,且前面加了__weak声明。用户需要重新定义该函数,并在函数内实现自己需要的功能,当外部中断产生时,就会调用用户自定义的函数,而不是调用__weak声明的函数。
tzritezm4aj64048947943.png
|