使用Platformio平台的libopencm3开发框架来开发STM32G0,下面为LED灯示例。
1 新建项目在PIO的Home页面新建项目,项目名称led,选择开发板为上一次建立的自定义开发板型号 MonkeyPi_STM32_G070RB,开发框架选择libopencm3:
2 LED灯程序在项目文件夹的src目录下新建文件main.c,内容如下: - 1/**
- 2 * @file main.c
- 3 * @author MakerInChina (makerinchina.cn)
- 4 * @brief
- 5 * @version 0.01
- 6 * @date 2022-09-04
- 7 *
- 8 * @copyright Copyright (c) 2022
- 9 *
- 10 */
- 11
- 12#include <libopencm3/stm32/rcc.h>
- 13#include <libopencm3/stm32/gpio.h>
- 14
- 15#define LED_GPIO_CLK RCC_GPIOC
- 16#define LED_GPIO_PORT GPIOC
- 17#define LED_GPIO_PIN GPIO12
- 18
- 19int main(void)
- 20{
- 21
- 22 //system clock
- 23 rcc_clock_setup(&rcc_clock_config[RCC_CLOCK_CONFIG_HSI_PLL_64MHZ]);
- 24
- 25 //gpio setting
- 26 rcc_periph_clock_enable(LED_GPIO_CLK);
- 27 gpio_mode_setup(LED_GPIO_PORT,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,LED_GPIO_PIN);
- 28
- 29 while (1)
- 30 {
- 31 //toggle gpio
- 32 gpio_toggle(LED_GPIO_PORT,LED_GPIO_PIN);
- 33
- 34 //delay with 'nop' instruction
- 35 for(int i=0; i<4000000; i++){
- 36 __asm__("nop;");
- 37 }
- 38 }
- 39
- 40 return 0;
- 41}
复制代码
- 1#include <libopencm3/stm32/rcc.h>
- 2#include <libopencm3/stm32/gpio.h>
复制代码
- 1#define LED_GPIO_CLK RCC_GPIOC
- 2#define LED_GPIO_PORT GPIOC
- 3#define LED_GPIO_PIN GPIO12
复制代码
- 1rcc_clock_setup(&rcc_clock_config[RCC_CLOCK_CONFIG_HSI_PLL_64MHZ]);
复制代码
这个是设置为内部PLL到64MHz,还可以根据自己的实际情况选择如下配置: - 1RCC_CLOCK_CONFIG_LSI_32KHZ,
- 2RCC_CLOCK_CONFIG_HSI_4MHZ,
- 3RCC_CLOCK_CONFIG_HSI_16MHZ,
- 4RCC_CLOCK_CONFIG_HSI_PLL_32MHZ,
- 5RCC_CLOCK_CONFIG_HSI_PLL_64MHZ,
- 6RCC_CLOCK_CONFIG_HSE_12MHZ_PLL_64MHZ,
复制代码
这个在rcc头文件有相关定义:
- 1rcc_periph_clock_enable(LED_GPIO_CLK);
复制代码
- 1gpio_mode_setup(LED_GPIO_PORT,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,LED_GPIO_PIN);
复制代码
- 1gpio_set_output_options(LED_GPIO_PORT,GPIO_OTYPE_OD,GPIO_OSPEED_MED,LED_GPIO_PIN);
复制代码
- 1gpio_toggle(LED_GPIO_PORT,LED_GPIO_PIN);
复制代码
其功能为翻转GPIO,还有其他输出操作函数: - 1void gpio_set(uint32_t gpioport, uint16_t gpios);
- 2void gpio_clear(uint32_t gpioport, uint16_t gpios);
- 3void gpio_port_write(uint32_t gpioport, uint16_t data);
复制代码
- 1for(int i=0; i<2000000; i++){
- 2 __asm__("nop;");
- 3}
复制代码
使用指令 'nop' 进行延时操作
3 烧写验证这里使用DAPLink SWD方式下载,因此更改项目配置文件 platformio.ini 文件如下: - 1[env:MonkeyPi_STM32_G070RB]
- 2platform = ststm32
- 3board = MonkeyPi_STM32_G070RB
- 4framework = libopencm3
- 5
- 6upload_protocol=cmsis-dap
- 7debug_tool=cmsis-dap
复制代码
更改后,点击 platformio:Upload 按钮上传到开发板即可验证,按 ‘F5’ 可以进行调试。
转载自:MakerInChina.cn
|