作为学习的经典,自然是通过GPIO点亮LED,或者是响应按钮的外部中断例程。这我们看看SOP8封装的芯片,
除了VDD和GND固定外,我们可以使用PA14、PA1、PA13、PA15、PA2、PA3这六个GPIO口。为了方便测试,使用转换座固定芯片。
下载器使用创芯坊的PowerLink2。按照功能定义,连接VDD,GND,SWDIO,SWCLK四个引脚,忽略RXD和TXD两个引脚。连接方式如下:
------------------------------------------
PowerLink2 MM32G0001A6T引脚
-------------------------------------------------
VDD 4(VDD)
GND(VSS) 2(VSS)
SWCLK 1 (SWCLK)
SWDIO 5 (SWDIO)
-------------------------------------------
连接OK后,打开GPIO_LED_Toggle示例工程,看看下载设置中是否能找到芯片信息(打开工程前,你需要安装MM32G0001A6T的Keil设备支持包)。
很容易就找到了,至少已经说明没啥大问题了。接下来修改程序,修改PA3用于驱动LED。
/* Define to prevent recursive inclusion */ #define _GPIO_LED_TOGGLE_C_ /* Files include */ #include <stdio.h> #include "platform.h" #include "gpio_led_toggle.h" void GPIO_Configure(void) { GPIO_InitTypeDef GPIO_InitStruct; RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE); GPIO_StructInit(&GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_WriteBit(GPIOA, GPIO_Pin_3, Bit_SET); } void GPIO_IO_Toggle(GPIO_TypeDef *GPIOn, uint16_t PINn) { if (Bit_RESET == GPIO_ReadOutputDataBit(GPIOn, PINn)) { GPIO_SetBits(GPIOn, PINn); } else { GPIO_ResetBits(GPIOn, PINn); } } void GPIO_LED_Toggle_Sample(void) { printf("\r\nTest %s", __FUNCTION__); GPIO_Configure(); while (1) { GPIO_IO_Toggle(GPIOA, GPIO_Pin_3); PLATFORM_DelayMS(500); } }
主程序部分
#define _MAIN_C_ /* Files include */ #include "platform.h" #include "gpio_led_toggle.h" #include "main.h" int main(void) { PLATFORM_Init(); GPIO_LED_Toggle_Sample(); while (1) { } }
试着编译成并下载。下载完成后,是用杜邦线,给转换座提供VDD,GND,以及驱动用的LED、电阻接到PA3(芯片第8引脚)上,上电,如果能看到LED以1秒的频率闪烁,说明程序没问题,下载也是正常的。
下面这个链接是例程运行起来后的样子。
https://www.bilibili.com/video/BV1yi4y1v7FY/?vd_source=adcef0c69ad4c414f6be4c9a989b3821
现在,下载的道路打通了,我们就可以整理下环境,方面后面的学习和测试了。