stm32开发新方式-platformio

发布者:清新时光最新更新时间:2020-04-15 来源: eefocus关键字:stm32  开发新方式  platformio 手机看文章 扫描二维码
随时随地手机看文章

硬件测试环境:


macOS

stm32f103c8t6最小系统板

st-link v2

新建pio工程

创建工程文件夹并进入:


mkdir test && cd test

查找自己适合的板子


pio boards

会看到以下结果,十里这里选择genericSTM32F103C8,这里执行这个命令,主要是查找对应自己最小系统板的board ID:


...

disco_l152rb STM32L152RBT6 32Mhz 128kB 16kB ST STM32LDISCOVERY

disco_f100rb STM32F100RBT6 24Mhz 128kB 8kB ST STM32VLDISCOVERY

genericSTM32F103C8 STM32F103C8 72Mhz 64kB 20kB STM32F103C8 (20k RAM. 64k Flash)

genericSTM32F103CB STM32F103CB 72Mhz 128kB 20kB STM32F103CB (20k RAM. 128k Flash)

genericSTM32F103R8 STM32F103R8 72Mhz 64kB 20kB STM32F103R8 (20k RAM. 64k Flash)

genericSTM32F103RB STM32F103RB 72Mhz 128kB 20kB STM32F103RB (20k RAM. 128k Flash)

genericSTM32F103RC STM32F103RC 72Mhz 256kB 48kB STM32F103RC (48k RAM. 256k Flash)

genericSTM32F103RE STM32F103RE 72Mhz 512kB 64kB STM32F103RE (64k RAM. 512k Flash)

...

初始化工程,以vim作为IDE:


pio init --ide vim -b genericSTM32F103C8

新建Makefile,添加以下内容(这里注意缩进问题):


all:

platformio -f -c vim run

upload:

platformio -f -c vim run --target upload

clean:

platformio -f -c vim run --target clean

program:

platformio -f -c vim run --target program

uploadfs:

platformio -f -c vim run --target uploadfs

update:

platformio -f -c vim update

配置platformio.ini文件

因为我们这里使用stlink v2,所以需要将程序上传方式定为stlink,默认生成的工程使用arduino框架,这是玩过Arduino的网友的福音,不是吗?只需添加一行指定程序上传方式,最终内容如下:


[env:genericSTM32F103C8]

platform = ststm32

board = genericSTM32F103C8

framework = arduino

upload_protocol = stlink

添加代码

添加点灯代码,十里的最小系统板上LED对应于管脚PB0,所以在src目录下添加main.cpp的内容如下:


#include

void setup() {

pinMode(PB0, OUTPUT);

}

void loop() {

digitalWrite(PB0, HIGH);

delay(500);

digitalWrite(PB0, LOW);

delay(500);

}


编译一下,编译的时候会下载stm32平台开发需要的编译工具和相关框架,你能做的就是waiting…:


➜ test make all

platformio -f -c vim run

[Wed Nov 8 09:42:57 2017] Processing genericSTM32F103C8

(upload_protocol: stlink; platform: ststm32; board: genericSTM32F103C8; framework: arduino)

--------------------------------------------------------------------------------------------------

Verbose mode can be enabled via `-v, --verbose` option

Collected 27 compatible libraries

Looking for dependencies...

No dependencies

Linking .pioenvs/genericSTM32F103C8/firmware.elf

Calculating size .pioenvs/genericSTM32F103C8/firmware.elf

text data bss dec hex filename

6484 1936 312 8732 221c .pioenvs/genericSTM32F103C8/firmware.elf

================================ [SUCCESS] Took 1.55 seconds =====================================

上传程序

因为前面已经配置了程序上传方式为stlink,所以将stlink连接最小系统板和mac就可以执行上传了,这里也会下载相应的下载工具,waiting … :


make upload

可能会遇到下面类似的问题:


➜ test make upload

platformio -f -c vim run --target upload

[Wed Nov 8 09:50:10 2017] Processing genericSTM32F103C8

(upload_protocol: stlink; platform: ststm32; board: genericSTM32F103C8; framework: arduino)

------------------------------------------------------------------------------------------------------

Verbose mode can be enabled via `-v, --verbose` option

Collected 27 compatible libraries

Looking for dependencies...

No dependencies

Linking .pioenvs/genericSTM32F103C8/firmware.elf

Checking program size

text data bss dec hex filename

6484 1936 312 8732 221c .pioenvs/genericSTM32F103C8/firmware.elf

Uploading .pioenvs/genericSTM32F103C8/firmware.bin

2017-11-08T09:50:11 INFO src/common.c: Loading device parameters....

2017-11-08T09:50:11 WARN src/common.c: unknown chip id! 0xe0042000

st-flash 1.3.1

*** [upload] Error 255

====================================== [ERROR] Took 1.53 seconds ======================================

make: *** [upload] Error 1

有一个临时的解决方法,将板上的BOOT0与VDD短接,复位一下最小系统板,会进入boot模式,此时执行make upload,程序会同时烧写在flash和内存上,一旦复位内存上的程序会消失,如果BOOT0还是接VDD的话还会进入boot模式,此时程序已经没了,但是flash 中仍然存在,所以只需将BOOT0短接GND再复位一下,板子就从flash启动了,所以最终程序调试方法为:


调试程序:BOOT0短接VDD,每次上传程序先复位板子,然后执行make upload;不进行调试的话,先以调试程序的方式上传程序,然后短接BOOT0和GND,复位一下板子,板子会从flash启动运行固化的程序。


上述问题本来不该出现,后来发现原来是我的usb hub有问题,我直接将stlink v2连接到macbook上是没有上述问题的。

关键字:stm32  开发新方式  platformio 引用地址:stm32开发新方式-platformio

上一篇:windows 下vscode+platformio开发stm32f103c8t6最小系统
下一篇:linux上搭建stm32开发环境 vscode+gcc+stm32cubeMX 和 vscode+platformIO

推荐阅读最新更新时间:2024-11-17 07:57

STM32串口空闲中断的使用
今天完善了USART串口接收数据函数以及程序,在每个USART外设上都添加了串口空闲中断函数。其步骤如下: 添加总线空闲中断功能的优点: a) 可以准确地判断出串口数据是否接收完毕,不需要额外添加定时器作数据接收完毕超时检测,不仅可以减少了TIM定时器外设 的使用,提高系统性能,而且可以增强程序的可读性(因为使用TIM定时器做超时检测时,需要在TIM定时器中断函数中添加一个 USART_RX_Over的标识符,影响了程序的可读性); 添加总线空闲中断功能的需要注意的地方: a) 在使用串口空闲中断时需要添加读DR位(数据寄存器)空闲中断变量,因为每次触发串口空闲中断时,需要读取对应USART的DR位(数据寄存器)才能清除
[单片机]
<font color='red'>STM32</font>串口空闲中断的使用
我的STM32艰苦入门经验体会与总结
  1.1为什么要把时间花在 犹豫 上?   每当我们在入门之前(ARM是这样,DSP也一样),总会会有很多疑问,会有很多顾虑。我们渴望知道学习STM32前景如何?需要啥基础?难不难?适不适合我?但是什么时候能心潮澎湃地、相当着急地开始学STM32?日子在一天一天过去!你开始行动了吗?没有行动的思索,永远都不可能入门!把这些时间用来看书吧,效果能好一万倍。   大家一般都是从51单片机过来的,回想一下,我们之前学单片机时如何入门呢?实际上都是先看书(理论),再玩板子(实践)。严格地说,应该是模仿实验。熟悉之后才会自己写程序代码实现某个功能。因此,如果你正在咨询STM32;如果你正对STM32心潮澎湃;如果你想入门STM32;那么,
[单片机]
STM32 IO中断(F407)
Title:STM32单片机系列(三) Date: 2020-2-22 Author: Page Categories: -单片机 Tags: -STM32F407 中断 STM32 F4 的每个 IO 都可以作为外部中断的中断输入口,这点也是 STM32 F4 的强大之处。 STM32 F407 的中断控制器支持 22 个外部 中断事件请求。每个中断设有状态位,每个中断事件都有独立的触发和屏蔽设置。 STM32 F407的 22 个外部中断为: EXTI线 0~15 :对应外部 IO 口的输入中断。 EXTI线 16 :连接到 PVD 输出。 EXTI线 17 :连接到 RTC 闹钟事件。 EXTI线 18 :连接到 USB
[单片机]
<font color='red'>STM32</font> IO中断(F407)
舵机驱动-GPIO MG995 STM32
应为TIM都用光了,只能使用GPIO,使用GPIO 好处就是很好移植。程序如下: 省略GPIO等初始化。PIN设置为 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; #ifndef _MOTOR_STEP_H_ #define _MOTOR_STEP_H_ #define MIN_DEGREE (0) #define MAX_DEGREE (90) #include stm32f10x.h s8 MotorMoveDegree(u8 degree);
[单片机]
STM32三种定时器
STM32三种定时器:高级控制定时器(TIM1与TIM8)、通用定时器(TIM2~TIM5)、基本定时器(TIM6与TIM7)。 TIM1与TIM8定时器的功能 (1)16位向上、向下、向上/下自动装载计数器 (2)16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65535之间的任意数值 (3)多达4个独立通道: ─ 输入捕获 ─ 输出比较 ─ PWM生成(边缘或中间对齐模式) ─ 单脉冲模式输出 (4)死区时间可编程的互补输出 (5)使用外部信号控制定时器和定时器互联的同步电路 (6)允许在指定数目的计数器周期之后更新定时器寄存器的重复计数器 (7)刹车输入信号可以将定时器输出信号置于复位状态或者一
[单片机]
STM32 禁用或开启总中断
STM32在使用时有时需要禁用全局中断,比如MCU在升级过程中需禁用外部中断,防止升级过程中外部中断触发导致升级失败。 ARM MDK中提供了如下两个接口来禁用和开启总中断: __disable_irq(); // 关闭总中断 __enable_irq(); // 开启总中断 但测试发现这样一个问题,在关闭总中断后,如果有中断触发,虽然此时不会引发中断,但在调用__enable_irq()开启总中断后,MCU会立即处理之前触发的中断。这说明__disable_irq()只是禁止CPU去响应中断,没有真正的去屏蔽中断的触发,中断发生后,相应的寄存器会将中断标志置位,在__enable_irq()开启中断后,由于相应的中断
[单片机]
stm32定时器时间计算
  STM32定时器的工作原理   STM32之所以能够实现定时,是单片机内部在计数脉冲(来自晶振)   T=1/F (F为频率)   例如:我们以51单片机举例,假设单片机搭配12MHz的晶振,由于51单片机是12分频(即1个机器周期有12个时钟周期),则单片机的最小定时时间为   1 2 MHz / 2 = 1 MHz   Tt = 1 / 1 MHz = 1 us   最小定时时间T=1/1MHz=1us   51单片机定时器:   方式0 13位最大定时时间间隔2^13=8.192ms   方式1 16位最大定时时间间隔2^16=65.536ms   方式2 8位最大定时时间间隔2^8=256us   由此我们知道对于
[单片机]
基于STM32嵌入式系统的智能控制网络终端设计
0 引言   智能网络终端是实现智能化管理的嵌入式终端设备。通常具有安全门禁系统和自动化控制的基本功能。本文重点介绍基于STM32的智能嵌入式终端的网络控制功能的设计和实现。 1 智能网络通信实现方案   将嵌入式系统与Internet连接起来实现远距离信息获取和控制功能的本质是嵌入式系统本身能够实现TCP/IP网络通信协议。该协议的解决方案总体上可分为两大类。第一类是直接在嵌入式设备上实现TCP/IP,使之直接连上Internet。这实质上是由MCU及内部固化TCP/IP协议的芯片组成应用系统的核心,MCU可以直接拨号上网,这种方法的硬件电路相对简单,也不需要中间环节的支持。但是由于使用了TCP/IP协议芯片,因此需要大容
[安防电子]
基于<font color='red'>STM32</font>嵌入式系统的智能控制网络终端设计
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved