diff options
| author | liYang~ <[email protected]> | 2022-08-05 23:51:40 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-08-05 11:51:40 -0400 |
| commit | a8581ac8a4667700067a5cff991edde0f1016806 (patch) | |
| tree | 06dc124b1304c7390c64f3d852d7fe56a6ff9c6c /bsp | |
| parent | 76885ca908319d2f6b587ccd363bffa4f038cbfc (diff) | |
[Ardunio]为stm32f103-blue-pill对接RTdunio软件包 (#6231)
* 对接RTdunio
Diffstat (limited to 'bsp')
13 files changed, 295 insertions, 25 deletions
diff --git a/bsp/stm32/stm32f072-st-nucleo/applications/arduino_main.cpp b/bsp/stm32/stm32f072-st-nucleo/applications/arduino_main.cpp index bf0431f83d..3219ffc63d 100644 --- a/bsp/stm32/stm32f072-st-nucleo/applications/arduino_main.cpp +++ b/bsp/stm32/stm32f072-st-nucleo/applications/arduino_main.cpp @@ -13,11 +13,12 @@ void setup(void) { /* put your setup code here, to run once: */ + Serial.begin(); } void loop(void) { /* put your main code here, to run repeatedly: */ - Serial.println("Hello Arduino!\n"); + Serial.println("Hello Arduino!"); delay(800); } diff --git a/bsp/stm32/stm32f103-blue-pill/applications/SConscript b/bsp/stm32/stm32f103-blue-pill/applications/SConscript index 9bb9abae89..6b22aa91b9 100644 --- a/bsp/stm32/stm32f103-blue-pill/applications/SConscript +++ b/bsp/stm32/stm32f103-blue-pill/applications/SConscript @@ -5,6 +5,9 @@ cwd = GetCurrentDir() src = Glob('*.c') CPPPATH = [cwd] +if GetDepend(['PKG_USING_RTDUINO']) and not GetDepend(['RTDUINO_NO_SETUP_LOOP']): + src += ['arduino_main.cpp'] + group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) list = os.listdir(cwd) diff --git a/bsp/stm32/stm32f103-blue-pill/applications/arduino_main.cpp b/bsp/stm32/stm32f103-blue-pill/applications/arduino_main.cpp new file mode 100644 index 0000000000..254c3d2e13 --- /dev/null +++ b/bsp/stm32/stm32f103-blue-pill/applications/arduino_main.cpp @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2006-2022, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2022-08-05 liYony first version + */ + +#include <Arduino.h> + +void setup(void) +{ + /* put your setup code here, to run once: */ + Serial.begin(); +} + +void loop(void) +{ + /* put your main code here, to run repeatedly: */ + Serial.println("Hello Arduino!"); + delay(800); +} diff --git a/bsp/stm32/stm32f103-blue-pill/applications/arduino_pinout/README.md b/bsp/stm32/stm32f103-blue-pill/applications/arduino_pinout/README.md new file mode 100644 index 0000000000..23323fa9fa --- /dev/null +++ b/bsp/stm32/stm32f103-blue-pill/applications/arduino_pinout/README.md @@ -0,0 +1,74 @@ +# STM32F103 Blue-Pill开发板的Arduino生态兼容说明 + +## 1 RTduino - RT-Thread的Arduino生态兼容层 + +STM32F103 Blue-Pill开发板已经完整适配了[RTduino软件包](https://github.com/RTduino/RTduino),即RT-Thread的Arduino生态兼容层。用户可以按照Arduino的编程习惯来操作该BSP,并且可以使用大量Arduino社区丰富的库,是对RT-Thread生态的极大增强。更多信息,请参见[RTduino软件包说明文档](https://github.com/RTduino/RTduino)。 + +### 1.1 如何开启针对本BSP的Arduino生态兼容层 + +Env 工具下敲入 menuconfig 命令,或者 RT-Thread Studio IDE 下选择 RT-Thread Settings: + +```Kconfig +Hardware Drivers Config ---> + Onboard Peripheral Drivers ---> + [*] Support Arduino +``` + +## 2 Arduino引脚排布 + + + +该BSP遵照Arduino UNO板的引脚排列方式,并扩展增加了Blue-pill自身的板载资源功能引脚。详见 `pins_arduino.c` + +| Arduino引脚编号 | STM32引脚编号 | 5V容忍 | 备注 | +| --------------- | ------------- | ------ | ------------------------------------------------------------ | +| 0 (D0) | -- | | 该引脚在UNO板中为串口RX引脚,不可当做普通IO | +| 1 (D1) | -- | | 该引脚在UNO板中为串口TX引脚,不可当做普通IO | +| 2 (D2) | PB9 | 是 | I2C1-SDA,被RT-Thread的I2C设备框架i2c1总线接管,不可当做普通IO | +| 3 (D3) | PB8 | 是 | I2C1_SCL,被RT-Thread的I2C设备框架i2c1总线接管,不可当做普通IO | +| 4 (D4) | PB7 | 是 | | +| 5 (D5) | PB6 | 是 | | +| 6 (D6) | PB5 | 否 | PWM3-CH2(定时器3发生) | +| 7 (D7) | PB4 | 是 | PWM3-CH1(定时器3发生) | +| 8 (D8) | PB3 | 是 | PWM2-CH2(定时器2发生) | +| 9 (D9) | PA15 | 是 | PWM2-CH1(定时器2发生) | +| 10 (D10) | PA12 | 是 | USB-DB,不可当做普通IO | +| 11 (D11) | PA11 | 是 | USB-DM,不可当做普通IO | +| 12 (D12) | PA10 | 是 | UART1-RX,被RT-Thread的UART设备框架uart1接管,不可当做普通IO | +| 13 (D13) | PA9 | 是 | UART1-RX,被RT-Thread的UART设备框架uart1接管,不可当做普通IO | +| 14 (D14) | PA8 | 是 | PWM1-CH1(定时器1发生) | +| 15 (D15) | PB15 | 是 | | +| 16 (D16) | PB14 | 是 | | +| 17 (D17) | PB13 | 是 | PWM1-CH1N(定时器1发生) | +| 18 (D18) | PB12 | 是 | | +| 19 (D19) | PC13 | 否 | 板载LED默认引脚 | +| 20 (D20) | PC14 | 否 | | +| 21 (D21) | PC15 | 否 | | +| 22 (D22) | PA2 | 否 | UART2-TX,被RT-Thread的UART设备框架uart2接管,不可当做普通IO | +| 23 (D23) | PA3 | 否 | UART2-RX,被RT-Thread的UART设备框架uart2接管,不可当做普通IO | +| 24 (D24) | PA5 | 否 | SPI-SCK, SPI功能尚未完全实现,目前仅作普通IO使用 | +| 25 (D25) | PA6 | 否 | SPI-MISO,SPI功能尚未完全实现,目前仅作普通IO使用 | +| 26 (D26) | PA7 | 否 | SPI-MOSI,SPI功能尚未完全实现,目前仅作普通IO使用 | +| 27 (D27) | PB10 | 是 | UART3-TX,被RT-Thread的UART设备框架uart3接管,不可当做普通IO | +| 28 (D28) | PB11 | 是 | UART3-RX,被RT-Thread的UART设备框架uart3接管,不可当做普通IO | +| A0 | PA0 | 否 | ADC | +| A1 | PA1 | 否 | ADC | +| A2 | PA4 | 否 | ADC | +| A3 | PB0 | 否 | ADC | +| A4 | PB1 | 否 | ADC | +| A5 | -- | | 芯片内部参考电压 ADC | +| A6 | -- | | 芯片内部温度 ADC | + +> 注意: +> +> 1. 驱动舵机和analogWrite函数要选择不同定时器发生的PWM信号引脚,由于STM32的定时器4个通道需要保持相同的频率,如果采用相同的定时器发生的PWM分别驱动舵机和analogWrite,可能会导致舵机失效。 +> 4. D10引脚是PWM反相位引脚(也就是常说的互补输出引脚CHxN)。但是这里不用考虑到占空比互补问题(CHx-20%,CHxN-80%),直接正常使用即可。 +> 4. STM32的PA15引脚默认作为JTAG下载使用,但是如果采用SWD调试时,PA15(D9)可以作为普通的IO口使用,但是需要设置一些寄存器。 + +> 参考资料 +> +> 1. 暂无 + +## 3 I2C总线 + +STM32F103 Blue-Pill板的I2C总线是板上丝印的 `SCL/D3` 和 `SDA/D2` 引脚,这两个引脚是被RT-Thread I2C设备框架接管的,不需要直接操控这两个引脚,直接引用`#include <Wire.h>`(Arduino官方I2C头文件)即可使用。 diff --git a/bsp/stm32/stm32f103-blue-pill/applications/arduino_pinout/SConscript b/bsp/stm32/stm32f103-blue-pill/applications/arduino_pinout/SConscript new file mode 100644 index 0000000000..beb0cb7a7c --- /dev/null +++ b/bsp/stm32/stm32f103-blue-pill/applications/arduino_pinout/SConscript @@ -0,0 +1,9 @@ +from building import * + +cwd = GetCurrentDir() +src = Glob('*.c') + Glob('*.cpp') +inc = [cwd] + +group = DefineGroup('Arduino', src, depend = ['PKG_USING_RTDUINO'], CPPPATH = inc) + +Return('group') diff --git a/bsp/stm32/stm32f103-blue-pill/applications/arduino_pinout/blue-pill-f103-pinout.png b/bsp/stm32/stm32f103-blue-pill/applications/arduino_pinout/blue-pill-f103-pinout.png Binary files differnew file mode 100644 index 0000000000..dd1c50a677 --- /dev/null +++ b/bsp/stm32/stm32f103-blue-pill/applications/arduino_pinout/blue-pill-f103-pinout.png diff --git a/bsp/stm32/stm32f103-blue-pill/applications/arduino_pinout/pins_arduino.c b/bsp/stm32/stm32f103-blue-pill/applications/arduino_pinout/pins_arduino.c new file mode 100644 index 0000000000..1e0de799bc --- /dev/null +++ b/bsp/stm32/stm32f103-blue-pill/applications/arduino_pinout/pins_arduino.c @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2006-2022, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2022-08-05 liYony first version + */ +#include <Arduino.h> +#include <board.h> +#include "pins_arduino.h" + +/* + {Arduino Pin, RT-Thread Pin [, Device Name(PWM or ADC), Channel]} + [] means optional + Digital pins must NOT give the device name and channel. + Analog pins MUST give the device name and channel(ADC, PWM or DAC). + Arduino Pin must keep in sequence. +*/ +const pin_map_t pin_map_table[]= +{ + {D0}, /* RX */ + {D1}, /* TX */ + {D2}, /* I2C1-SDA */ + {D3}, /* I2C1-SCL */ + {D4, GET_PIN(B,7)}, + {D5, GET_PIN(B,6)}, + {D6, GET_PIN(B,5), "pwm3", 2},/* PWM */ + {D7, GET_PIN(B,4), "pwm3", 1}, /* PWM */ + {D8, GET_PIN(B,3), "pwm2", 2}, /* PWM */ + {D9, GET_PIN(A,15), "pwm2", 1}, /* PWM */ + {D10}, /* USB-DP */ + {D11}, /* USB-DM */ + {D12}, /* UART1-RX */ + {D13}, /* UART1-TX */ + {D14, GET_PIN(A,8), "pwm1", 1}, /* PWM */ + {D15, GET_PIN(B,15)}, + {D16, GET_PIN(B,14)}, + {D17, GET_PIN(B,13), "pwm1", -1}, /* PWM */ + {D18, GET_PIN(B,12)}, + {D19, GET_PIN(C,13)}, /* user led1 */ + {D20, GET_PIN(C,14)}, + {D21, GET_PIN(C,15)}, + {D22}, /* UART2-TX */ + {D23}, /* UART2-RX */ + /* The connection of RTdunio SPI has not been completed, * + * and it can only be used as a common GPIO at present. */ + {D24, GET_PIN(A,5)}, /* SPI-SCK */ + {D25, GET_PIN(A,6)}, /* SPI-MISO */ + {D26, GET_PIN(A,7)}, /* SPI-MOSI */ + {D27}, /* UART3-TX */ + {D28}, /* UART3-RX */ + {A0, GET_PIN(A,0), "adc1", 0}, /* ADC */ + {A1, GET_PIN(A,1), "adc1", 1}, /* ADC */ + {A2, GET_PIN(A,4), "adc1", 4}, /* ADC */ + {A3, GET_PIN(B,0), "adc1", 8}, /* ADC */ + {A4, GET_PIN(B,1), "adc1", 9}, /* ADC */ + {A5, RT_NULL, "adc1", 17}, /* ADC, On-Chip: internal reference voltage, ADC_CHANNEL_VREFINT */ + {A6, RT_NULL, "adc1", 16} /* ADC, On-Chip: internal temperature sensor, ADC_CHANNEL_TEMPSENSOR */ +}; diff --git a/bsp/stm32/stm32f103-blue-pill/applications/arduino_pinout/pins_arduino.h b/bsp/stm32/stm32f103-blue-pill/applications/arduino_pinout/pins_arduino.h new file mode 100644 index 0000000000..7c69c82807 --- /dev/null +++ b/bsp/stm32/stm32f103-blue-pill/applications/arduino_pinout/pins_arduino.h @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2006-2022, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2022-08-05 liYony first version + */ + +#ifndef Pins_Arduino_h +#define Pins_Arduino_h + +/* pins alias. Must keep in sequence */ +#define D0 (0) +#define D1 (1) +#define D2 (2) +#define D3 (3) +#define D4 (4) +#define D5 (5) +#define D6 (6) +#define D7 (7) +#define D8 (8) +#define D9 (9) +#define D10 (10) +#define D11 (11) +#define D12 (12) +#define D13 (13) +#define D14 (14) +#define D15 (15) +#define D16 (16) +#define D17 (17) +#define D18 (18) +#define D19 (19) +#define D20 (20) +#define D21 (21) +#define D22 (22) +#define D23 (23) +#define D24 (24) +#define D25 (25) +#define D26 (26) +#define D27 (27) +#define D28 (28) +#define A0 (29) +#define A1 (30) +#define A2 (31) +#define A3 (32) +#define A4 (33) +#define A5 (34) +#define A6 (35) + +#define F_CPU 72000000L /* CPU: 72MHz */ +#define LED_BUILTIN D19 /* Default Built-in LED */ + +#define RTDUINO_DEFAULT_IIC_BUS_NAME "i2c1" + +#define RTDUINO_SERIAL2_DEVICE_NAME "uart2" +#define RTDUINO_SERIAL3_DEVICE_NAME "uart3" + +#endif /* Pins_Arduino_h */ diff --git a/bsp/stm32/stm32f103-blue-pill/board/CubeMX_Config/CubeMX_Config.ioc b/bsp/stm32/stm32f103-blue-pill/board/CubeMX_Config/CubeMX_Config.ioc index cb1e8f19de..74e56aa6ad 100644 --- a/bsp/stm32/stm32f103-blue-pill/board/CubeMX_Config/CubeMX_Config.ioc +++ b/bsp/stm32/stm32f103-blue-pill/board/CubeMX_Config/CubeMX_Config.ioc @@ -33,33 +33,34 @@ Mcu.Pin12=PB0 Mcu.Pin13=PB1 Mcu.Pin14=PB10 Mcu.Pin15=PB11 -Mcu.Pin16=PA8 -Mcu.Pin17=PA9 -Mcu.Pin18=PA10 -Mcu.Pin19=PA11 +Mcu.Pin16=PB13 +Mcu.Pin17=PA8 +Mcu.Pin18=PA9 +Mcu.Pin19=PA10 Mcu.Pin2=PD0-OSC_IN -Mcu.Pin20=PA12 -Mcu.Pin21=PA13 -Mcu.Pin22=PA14 -Mcu.Pin23=PA15 -Mcu.Pin24=PB3 -Mcu.Pin25=PB4 -Mcu.Pin26=PB5 -Mcu.Pin27=VP_ADC1_TempSens_Input -Mcu.Pin28=VP_ADC1_Vref_Input -Mcu.Pin29=VP_RTC_VS_RTC_Activate +Mcu.Pin20=PA11 +Mcu.Pin21=PA12 +Mcu.Pin22=PA13 +Mcu.Pin23=PA14 +Mcu.Pin24=PA15 +Mcu.Pin25=PB3 +Mcu.Pin26=PB4 +Mcu.Pin27=PB5 +Mcu.Pin28=VP_ADC1_TempSens_Input +Mcu.Pin29=VP_ADC1_Vref_Input Mcu.Pin3=PD1-OSC_OUT -Mcu.Pin30=VP_SYS_VS_Systick -Mcu.Pin31=VP_TIM1_VS_ClockSourceINT -Mcu.Pin32=VP_TIM2_VS_ClockSourceINT -Mcu.Pin33=VP_TIM3_VS_ClockSourceINT +Mcu.Pin30=VP_RTC_VS_RTC_Activate +Mcu.Pin31=VP_SYS_VS_Systick +Mcu.Pin32=VP_TIM1_VS_ClockSourceINT +Mcu.Pin33=VP_TIM2_VS_ClockSourceINT +Mcu.Pin34=VP_TIM3_VS_ClockSourceINT Mcu.Pin4=PA0-WKUP Mcu.Pin5=PA1 Mcu.Pin6=PA2 Mcu.Pin7=PA3 Mcu.Pin8=PA4 Mcu.Pin9=PA5 -Mcu.PinsNb=34 +Mcu.PinsNb=35 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32F103C8Tx @@ -122,6 +123,9 @@ PB10.Mode=Asynchronous PB10.Signal=USART3_TX PB11.Mode=Asynchronous PB11.Signal=USART3_RX +PB13.Locked=true +PB13.Mode=PWM Generation1 CH1 CH1N +PB13.Signal=TIM1_CH1N PB3.Signal=S_TIM2_CH2 PB4.Signal=S_TIM3_CH1 PB5.Signal=S_TIM3_CH2 @@ -195,7 +199,7 @@ SH.ADCx_IN8.0=ADC1_IN8,IN8 SH.ADCx_IN8.ConfNb=1 SH.ADCx_IN9.0=ADC1_IN9,IN9 SH.ADCx_IN9.ConfNb=1 -SH.S_TIM1_CH1.0=TIM1_CH1,PWM Generation1 CH1 +SH.S_TIM1_CH1.0=TIM1_CH1,PWM Generation1 CH1 CH1N SH.S_TIM1_CH1.ConfNb=1 SH.S_TIM2_CH1_ETR.0=TIM2_CH1,PWM Generation1 CH1 SH.S_TIM2_CH1_ETR.ConfNb=1 @@ -211,8 +215,8 @@ SPI1.Direction=SPI_DIRECTION_2LINES SPI1.IPParameters=VirtualType,Mode,Direction,BaudRatePrescaler,CalculateBaudRate SPI1.Mode=SPI_MODE_MASTER SPI1.VirtualType=VM_MASTER -TIM1.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1 -TIM1.IPParameters=Channel-PWM Generation1 CH1 +TIM1.Channel-PWM\ Generation1\ CH1\ CH1N=TIM_CHANNEL_1 +TIM1.IPParameters=Channel-PWM Generation1 CH1 CH1N TIM2.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1 TIM2.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2 TIM2.IPParameters=Channel-PWM Generation1 CH1,Channel-PWM Generation2 CH2 diff --git a/bsp/stm32/stm32f103-blue-pill/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c b/bsp/stm32/stm32f103-blue-pill/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c index b6bb182a4f..1d68034e4d 100644 --- a/bsp/stm32/stm32f103-blue-pill/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c +++ b/bsp/stm32/stm32f103-blue-pill/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c @@ -327,10 +327,17 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim) /* USER CODE BEGIN TIM1_MspPostInit 0 */ /* USER CODE END TIM1_MspPostInit 0 */ + __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); /**TIM1 GPIO Configuration + PB13 ------> TIM1_CH1N PA8 ------> TIM1_CH1 */ + GPIO_InitStruct.Pin = GPIO_PIN_13; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + GPIO_InitStruct.Pin = GPIO_PIN_8; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; diff --git a/bsp/stm32/stm32f103-blue-pill/board/Kconfig b/bsp/stm32/stm32f103-blue-pill/board/Kconfig index 3d546c6975..6e27e245c0 100644 --- a/bsp/stm32/stm32f103-blue-pill/board/Kconfig +++ b/bsp/stm32/stm32f103-blue-pill/board/Kconfig @@ -15,6 +15,32 @@ menu "Onboard Peripheral Drivers" select BSP_USING_UART1 default y + config BSP_USING_ARDUINO + bool "Support Arduino" + select PKG_USING_RTDUINO + select BSP_USING_STLINK_TO_USART + select BSP_USING_UART2 + select BSP_USING_UART3 + select BSP_USING_GPIO + select BSP_USING_ADC + select BSP_USING_ADC1 + select BSP_USING_PWM + select BSP_USING_PWM1 + select BSP_USING_PWM1_CH1 + select BSP_USING_PWM2 + select BSP_USING_PWM2_CH1 + select BSP_USING_PWM2_CH2 + select BSP_USING_PWM3 + select BSP_USING_PWM3_CH1 + select BSP_USING_PWM3_CH2 + select BSP_USING_I2C + select BSP_USING_I2C1 + imply RTDUINO_USING_SERVO + imply RTDUINO_USING_WIRE + imply RTDUINO_USING_ADAFRUIT + imply RTDUINO_USING_MSTIMER2 + default n + endmenu menu "On-chip Peripheral Drivers" diff --git a/bsp/stm32/stm32f401-st-nucleo/applications/arduino_main.cpp b/bsp/stm32/stm32f401-st-nucleo/applications/arduino_main.cpp index 39391c9650..b2b2ab8162 100644 --- a/bsp/stm32/stm32f401-st-nucleo/applications/arduino_main.cpp +++ b/bsp/stm32/stm32f401-st-nucleo/applications/arduino_main.cpp @@ -13,11 +13,12 @@ void setup(void) { /* put your setup code here, to run once: */ + Serial.begin(); } void loop(void) { /* put your main code here, to run repeatedly: */ - Serial.println("Hello Arduino!\n"); + Serial.println("Hello Arduino!"); delay(800); } diff --git a/bsp/stm32/stm32f401-st-nucleo/board/Kconfig b/bsp/stm32/stm32f401-st-nucleo/board/Kconfig index 20d37d836a..940c0f632e 100644 --- a/bsp/stm32/stm32f401-st-nucleo/board/Kconfig +++ b/bsp/stm32/stm32f401-st-nucleo/board/Kconfig @@ -14,7 +14,7 @@ menu "Onboard Peripheral Drivers" select BSP_USING_UART2 default y - config BSP_USING_ARDUINO + config BSP_USING_ARDUINO bool "Support Arduino" select PKG_USING_RTDUINO select BSP_USING_STLINK_TO_USART |
