电子产业一站式赋能平台

PCB联盟网

搜索
查看: 44|回复: 0
收起左侧

STM32CubeMX之GPIO的使用

[复制链接]

454

主题

454

帖子

2396

积分

三级会员

Rank: 3Rank: 3

积分
2396
发表于 2020-3-6 21:58:00 | 显示全部楼层 |阅读模式
相信大多是硬件工程师的第一个程序都是使用IO口点灯,就像程序员的第一个程序都是Hello world一样。本篇文章将详细的介绍使用STM32CubeMx生成工程并使用GPIO,包括基本的输入输出、中断等的使用。前期准备:
  •     STM32硬件电路板及仿真器(本篇以STM32F072C8单片机为例)
  •     Keil v5以上版本(MDK-ARM)
    系统配置然后配置调试接口为SWD模式,系统时基为Systick定时器,如下图所示。Systick初始化时会自动打开中断(最低优先级),定时周期为1ms。

    o4wqpmgayi464048947042.jpg

    o4wqpmgayi464048947042.jpg

    GPIO配置
    配置GPIO时,直接点击右侧相应的引脚,在弹出菜单中选择相应的功能,输入还是输出等,本例中配置了PA0、PA1、PA2三个端口,分别配置为输出模式、输入模式和外部中断模式。配置完成后可在中间区域对每个IO进行详细配置,包括端口初始电平,输出模式是推挽输出还是开漏输出,输入上下拉选择,端口速度以及端口标签。如下图所示。本例中PA0配置为推挽输出模式,用于控制LED,PA1配置为上拉输入模式,用于检测按键KEY1,PA2配置为外部中断模式,下降沿中断,用于检测按键KEY2。

    00fqugetg3064048947142.jpg

    00fqugetg3064048947142.jpg

    端口配置为外部中断后,需要在NVIC配置中打开相应的中断才能正常使用,如下图所示。可以看到System tick中断是默认打开的。

    smyzz1kfbvj64048947242.jpg

    smyzz1kfbvj64048947242.jpg

    时钟配置
    首先按照上篇文章的介绍新建工程,之后配置系统时钟,本例中选择外部高速时钟HSE作为系统时钟,需要配置RCC如下图,配置后相应的引脚显示为时钟模式。

    kmoy0rvqdsa64048947342.jpg

    kmoy0rvqdsa64048947342.jpg

    配置完成后再Clock Configuration页面进一步配置时钟,首先输入外部时钟的频率,然后依次选择时钟源以及分频、倍频系数。本例外部时钟为8MHz,最终配置系统时钟为48MHz。当配置出现问题时,软件会标红提示。

    xu3pf4bpryq64048947442.jpg

    xu3pf4bpryq64048947442.jpg


    xsvpf22tjy164048947542.jpg

    xsvpf22tjy164048947542.jpg

    所有配置完成后即可生成工程,可以看到时钟和GPIO初始化已经有软件生成,用户只要编写自己的程序就行。普通IO操作比较简单,直接调用相关函数即可,如下图。

    teuys5ulku364048947643.jpg

    teuys5ulku364048947643.jpg


    外部中断的使用相对复杂一些,需要用户自己编写回调函数,在stm32f0xx_it.c文件中,可以看到,中断函数已经定义好。

    wiwf3mx0wly64048947743.png

    wiwf3mx0wly64048947743.png


    tp31y2okcgs64048947843.png

    tp31y2okcgs64048947843.png

    中断程序最终调用的是void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)函数,该函数已经由系统生成,但内容为空,且前面加了__weak声明。用户需要重新定义该函数,并在函数内实现自己需要的功能,当外部中断产生时,就会调用用户自定义的函数,而不是调用__weak声明的函数。

    tzritezm4aj64048947943.png

    tzritezm4aj64048947943.png
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表