STM32G0开发笔记-Platformio+libopencm3-多通道ADC与DMA使用
使用Platformio平台的libopencm3开发框架来开发STM32G0,以下为多通道ADC与DMA的使用。
1 新建项目
建立adc_dma项目
在PIO的Home页面新建项目,项目名称adc_dma,选择开发板为 MonkeyPi_STM32_G070RB,开发框架选择libopencm3;
项目建立完成后在src目录下新建main.c主程序文件;
修改下载和调试方式,这里开发板使用的是DAPLink仿真器,因此修改platformio.ini文件如下:
12upload_protocol = cmsis-dapdebug_tool = cmsis-dap
2 编写程序2.1 ADC 设置这里设置PA0、PA1、PA2、PA3四个引脚为ADC:
1234567891011121314151617181920212223242526272829static void adc_setup(void){ rcc_periph_clock_enable(RCC_ADC); rcc_periph_clock_enable(RCC_GPIOA); gp ...
STM32G0开发笔记-Platformio+libopencm3-ADC使用
使用Platformio平台的libopencm3开发框架来开发STM32G0,以下为ADC的基本使用。
1 新建项目
建立adc项目
在PIO的Home页面新建项目,项目名称adc,选择开发板为 MonkeyPi_STM32_G070RB,开发框架选择libopencm3;
项目建立完成后在src目录下新建main.c主程序文件;
修改下载和调试方式,这里开发板使用的是DAPLink仿真器,因此修改platformio.ini文件如下:
12upload_protocol = cmsis-dapdebug_tool = cmsis-dap
2 编写程序2.1 ADC配置这里配置PA0引脚为ADC输入,为ADC_IN0通道,设置如下:
123456789101112131415161718192021void adc_setup(){ rcc_periph_clock_enable(RCC_GPIOA); rcc_periph_clock_enable(RCC_ADC); gpio_mode_setup(GPIOA,GPIO_MODE_ANALOG, ...
STM32G0开发笔记-Platformio+libopencm3-I2C接口软件模拟与GXHT30温湿度模块
使用Platformio平台的libopencm3开发框架来开发STM32G0,以下使用软件模拟I2C总线时序,并用它来读取GXHT30温湿度数据。
1 新建项目
建立gxht30项目
在PIO的Home页面新建项目,项目名称gxht30,选择开发板为 MonkeyPi_STM32_G070RB,开发框架选择libopencm3;
项目建立完成后在src目录下新建main.c主程序文件;
修改下载和调试方式,这里开发板使用的是DAPLink仿真器,因此修改platformio.ini文件如下:
12upload_protocol = cmsis-dapdebug_tool = cmsis-dap
2 I2C软件模拟2.1 文件结构在lib目录新建 sw_i2c 文件夹,并新建如下文件:
2.2 sw_i2c_port.h 与底层IO读写相关1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162/** ...
STM32G0开发笔记-Platformio+libopencm3-FreeRTOS和队列Queue使用
使用Platformio平台的libopencm3开发框架来开发STM32G0,下面为使用FreeRTOS系统的队列Queue。
1 新建项目
在PIO主页新建项目,框架选择libopencm3,开发板选择 MonkeyPi_STM32_G070RB;
新建完成后在src目录新建主程序文件main.c;
然后更改项目文件platformio.ini的烧写和调试方式:
12upload_protocol = cmsis-dapdebug_tool = cmsis-dap
2 添加FreeRTOS库将上一节工程中的FreeRTOS目录直接拷贝到当前工程的lib目录下即可,添加完成后重新打开项目,以便VSCode获取代码索引;
3 在FreeRTOS中使用Queue这里将串口接收的数据存放到队列中,然后在其他任务中可以取出来进行打印显示;
创建队列
1234xQueueHandle uart_queue;//create queue uart_queue = xQueueCreate(16, sizeof(char));
使用 xQueueCreate 接口创建队列,上面为创 ...
STM32G0开发笔记-Platformio+libopencm3-SPI接口SD卡使用
使用Platformio平台的libopencm3开发框架来开发STM32G0,下面介绍SD卡模块的使用方法。
1 新建项目
在PIO主页新建项目spi_sdcard,框架选择libopencm3,开发板选择 MonkeyPi_STM32_G070RB;
新建完成后在src目录新建主程序文件main.c;
然后更改项目文件platformio.ini的烧写和调试方式:
12upload_protocol = cmsis-dapdebug_tool = cmsis-dap
2 编写程序2.1 加入FATFS库
从网站fatfs http://elm-chan.org/fsw/ff/00index_e.html 下载最新的源码;
工程目录lib下新建fatfs文件夹;
然后将fatfs源码的source目录下所有文件放置到工程的lib\fatfs目录下;
将diskio.c文件移动到src目录下,这个文件是需要我们实现的底层接口;
2.2 实现SPI接口的SD读写在src目录下新建spi_sd.h 和 spi_sd.c 文件,现在目录结构如下:
spi_sd.h 头文件
1 ...
STM32G0开发笔记-Platformio+libopencm3-SPI接口使用
使用Platformio平台的libopencm3开发框架来开发STM32G0,下面介绍SPI接口的基本使用。
1 SPI配置以下为设置SPI1,引脚映射为PA5\6\7,使用软件控制CS-PA4;
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354/* Enable SPI1 Periph and gpio clocks */ rcc_periph_clock_enable(RCC_SPI1); rcc_periph_clock_enable(RCC_GPIOA); /* Configure GPIOs: * * SCK=PA5 * MOSI=PA7 * MISO=PA6 * * for SD card * SDCS PA4 *///MOSI & SCK & MISOgpio_mode_setup(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE,GPIO5|GPIO7|G ...
STM32G0开发笔记-Platformio+libopencm3-PWM使用与LED呼吸灯
使用Platformio平台的libopencm3开发框架来开发STM32G0,下面使用PWM来实现LED呼吸灯效果。
1 新建项目
在PIO主页新建项目pwm,框架选择libopencm3,开发板选择 MonkeyPi_STM32_G070RB;
新建完成后在src目录新建主程序文件main.c;
然后更改项目文件platformio.ini的烧写和调试方式:
12upload_protocol = cmsis-dapdebug_tool = cmsis-dap
2 PWM配置
GPIO设置为复用PWM输出
123456789101112131415161718/** * @brief gpio config * */static void gpio_setup(void){ rcc_periph_clock_enable(RCC_GPIOC); gpio_mode_setup(GPIOC, GPIO_MODE_AF, GPIO_PUPD_NONE, ...
STM32G0开发笔记-Platformio+libopencm3-按键和外部中断
使用Platformio平台的libopencm3开发框架来开发STM32G0,下面为GPIO接按键的使用方式。
1 新建项目
在PIO主页新建项目button,框架选择libopencm3,开发板选择 MonkeyPi_STM32_G070RB;
新建完成后在src目录新建主程序文件main.c;
然后更改项目文件platformio.ini的烧写和调试方式:
12upload_protocol = cmsis-dapdebug_tool = cmsis-dap
2 轮询方式使用按键
设置GPIO为输入模式
12//set gpio input buttongpio_mode_setup(GPIOC, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO11);
获取按键输入状态
123456while (1){ if(gpio_get(GPIOC,GPIO11)){ gpio_toggle(GPIOC,GPIO12); } }
使用gpio_get获取按键的状态;
3 外 ...
STM32G0开发笔记-Platformio+libopencm3-定时器使用
使用Platformio平台的libopencm3开发框架来开发STM32G0,以下为定时器timer的基本使用方法。
1 新建项目
在PIO主页新建项目timer,框架选择libopencm3,开发板选择 MonkeyPi_STM32_G070RB;
新建完成后在src目录新建主程序文件main.c;
然后更改项目文件platformio.ini的烧写和调试方式:
12upload_protocol = cmsis-dapdebug_tool = cmsis-dap
2 使用基本定时器
定时器设置
以下为设置定时器3的过程:
12345678910111213141516171819202122232425262728293031323334static void timer_setup(void){ /* Enable TIM3 clock. */ rcc_periph_clock_enable(RCC_TIM3); /* Enable TIM3 interrupt. */ nvic_enable_irq(NVIC_TIM3_IRQ); /* Timer gl ...
STM32G0开发笔记-Platformio+libopencm3-FreeRTOS基本使用
使用Platformio平台的libopencm3开发框架来开发STM32G0,下面为使用FreeRTOS系统。
1 新建项目
在PIO主页新建项目,框架选择libopencm3,开发板选择 MonkeyPi_STM32_G070RB;
新建完成后在src目录新建主程序文件main.c;
然后更改项目文件platformio.ini的烧写和调试方式:
12upload_protocol = cmsis-dapdebug_tool = cmsis-dap
2 添加FreeRTOS源码
下载FreeRTOS源码
在freertos网站:https://www.freertos.org/a00104.html 下载好源码,这里下载最新版202112.00;
添加源码到项目:
直接拷贝源码下的FreeRTOS文件夹到项目的lib目录中;
添加到项目编译
在lib目录的FreeRTOS文件夹下新建 library.json 文件,内容如下:
1234567891011121314151617{ "name": "FreeRTOS&quo ...