[arduino][stm32f407-robomaster-c] 对接RTduino (#6759)

This commit is contained in:
螺丝松掉的人
2022-12-20 13:59:54 +08:00
committed by GitHub
parent 8ade08799b
commit ba2d7ba4c0
13 changed files with 301 additions and 1546 deletions

View File

@@ -1,9 +1,12 @@
from building import *
import os
cwd = GetCurrentDir()
src = Glob('*.c')
cwd = GetCurrentDir()
CPPPATH = [cwd]
src = Glob('*.c')
if GetDepend(['PKG_USING_RTDUINO']) and not GetDepend(['RTDUINO_NO_SETUP_LOOP']):
src += ['arduino_main.cpp']
group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH)

View File

@@ -0,0 +1,24 @@
/*
* Copyright (c) 2006-2022, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2022-12-20 default first version
*/
#include <Arduino.h>
void setup(void)
{
/* put your setup code here, to run once: */
pinMode(LED_BUILTIN, OUTPUT);
}
void loop(void)
{
/* put your main code here, to run repeatedly: */
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
delay(100);
}

View File

@@ -0,0 +1,41 @@
# xxx 开发板的Arduino生态兼容说明
## 1 RTduino - RT-Thread的Arduino生态兼容层
stm32f407-robomaster-c 开发板已经完整适配了[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 --->
[*] Compatible with Arduino Ecosystem (RTduino)
```
## 2 Arduino引脚排布
更多引脚布局相关信息参见 [pins_arduino.c](pins_arduino.c) 和 [pins_arduino.h](pins_arduino.h)。
![xxx-pinout](xxx-pinout.jpg)
| Arduino引脚编号 | STM32引脚编号 | 5V容忍 | 备注 |
| ------------------- | --------- | ---- | ------------------------------------------------------------------------- |
| 0 (D0) | PH11 | 是/否 | 板载用户LED |
| 1 (D1) | PB7 | 是/否 | Serial-RX默认被RT-Thread的UART设备框架uart1接管 |
| 2 (D2) | PA9 | 是/否 | Serial-TX默认被RT-Thread的UART设备框架uart1接管 |
| 3 (D3) | PG9 | 是/否 | Serial-RX默认被RT-Thread的UART设备框架uart6接管 |
| 4 (D4) | PG14 | 是/否 | Serial-TX默认被RT-Thread的UART设备框架uart6接管 |
| 5 (D5) | PB0 | 是/否 | I2C1-SCL默认被RT-Thread的I2C设备框架i2c1接管 |
| 6 (D6) | PB0 | 是/否 | I2C1-SDA默认被RT-Thread的I2C设备框架i2c1接管 |
| 7 (D7) | PE9 | 是/否 | PWM1-CH1默认被RT-Thread的PWM设备框架pwm1接管 |
| 8 (D8) | PE11 | 是/否 | PWM1-CH2默认被RT-Thread的PWM设备框架pwm1接管 |
| 9 (D9) | PE13 | 是/否 | PWM1-CH3默认被RT-Thread的PWM设备框架pwm1接管 |
| 10 (D10) | PE14 | 是/否 | PWM1-CH4默认被RT-Thread的PWM设备框架pwm1接管 |
| 11 (D11) | PE14 | 是/否 | PWM1-CH4默认被RT-Thread的PWM设备框架pwm1接管 |
| 12 (D12) | PC6 | 是/否 | PWM8-CH1默认被RT-Thread的PWM设备框架pwm8接管 |
| 13 (D13) | PI6 | 是/否 | PWM8-CH2默认被RT-Thread的PWM设备框架pwm8接管 |
| 14 (D14) | PI7 | 是/否 | PWM8-CH3默认被RT-Thread的PWM设备框架pwm8接管 |
| 15 (A0) | -- | | 芯片内部温度 ADC默认被RT-Thread的ADC设备框架adc1接管 |
| 16 (A1) | -- | | 芯片内部参考电压 ADC默认被RT-Thread的ADC设备框架adc1接管 |

View File

@@ -0,0 +1,9 @@
from building import *
cwd = GetCurrentDir()
src = Glob('*.c') + Glob('*.cpp')
inc = [cwd]
group = DefineGroup('RTduino', src, depend = ['PKG_USING_RTDUINO'], CPPPATH = inc)
Return('group')

View File

@@ -0,0 +1,41 @@
/*
* Copyright (c) 2006-2022, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2022-12-20 default first version
*/
#include <Arduino.h>
#include <board.h>
#include "pins_arduino.h"
/*
* {Arduino Pin, RT-Thread Pin [, Device Name, 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, GET_PIN(H,11)}, /* LED_BUILTIN */
{D1, GET_PIN(B,7), "uart1"}, /* Serial-RX */
{D2, GET_PIN(A,9), "uart1"}, /* Serial-TX */
{D3, GET_PIN(G,9), "uart6"}, /* Serial-RX */
{D4, GET_PIN(G,14), "uart6"}, /* Serial-TX */
{D5, GET_PIN(B,0), "i2c1"}, /* I2C-SCL (Wire) */
{D6, GET_PIN(B,0), "i2c1"}, /* I2C-SDA (Wire) */
{D7, GET_PIN(E,9), "pwm1", 1}, /* PWM */
{D8, GET_PIN(E,11), "pwm1", 2}, /* PWM */
{D9, GET_PIN(E,13), "pwm1", 3}, /* PWM */
{D10, GET_PIN(E,14), "pwm1", 4}, /* PWM */
{D11, GET_PIN(E,14), "pwm1", 4}, /* PWM */
{D12, GET_PIN(C,6), "pwm8", 1}, /* PWM */
{D13, GET_PIN(I,6), "pwm8", 2}, /* PWM */
{D14, GET_PIN(I,7), "pwm8", 3}, /* PWM */
{A0, RT_NULL, "adc1", 18}, /* ADC, On-Chip: internal temperature sensor, ADC_CHANNEL_TEMPSENSOR */
{A1, RT_NULL, "adc1", 17}, /* ADC, On-Chip: internal reference voltage, ADC_CHANNEL_VREFINT */
};

View File

@@ -0,0 +1,40 @@
/*
* Copyright (c) 2006-2022, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2022-12-20 default 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 A0 (15)
#define A1 (16)
#define F_CPU 168000000L /* CPU:168MHz */
#define LED_BUILTIN D0 /* Default Built-in LED */
/* i2c1 : PF0-SDA PF1-SCL */
#define RTDUINO_DEFAULT_IIC_BUS_NAME "i2c1"
#endif /* Pins_Arduino_h */

File diff suppressed because one or more lines are too long

View File

@@ -1,9 +1,18 @@
#MicroXplorer Configuration settings - do not modify
ADC1.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_TEMPSENSOR
ADC1.IPParameters=Rank-0\#ChannelRegularConversion,master,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,NbrOfConversionFlag
ADC1.NbrOfConversionFlag=1
ADC1.Rank-0\#ChannelRegularConversion=1
ADC1.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_3CYCLES
ADC1.master=1
ADC3.Channel-1\#ChannelRegularConversion=ADC_CHANNEL_8
ADC3.IPParameters=Rank-1\#ChannelRegularConversion,Channel-1\#ChannelRegularConversion,SamplingTime-1\#ChannelRegularConversion,NbrOfConversionFlag
ADC3.NbrOfConversionFlag=1
ADC3.Rank-1\#ChannelRegularConversion=1
ADC3.SamplingTime-1\#ChannelRegularConversion=ADC_SAMPLETIME_3CYCLES
CAD.formats=
CAD.pinconfig=
CAD.provider=
CAN1.BS1=CAN_BS1_1TQ
CAN1.BS2=CAN_BS2_1TQ
CAN1.CalculateBaudRate=875000
@@ -17,23 +26,25 @@ CAN2.CalculateTimeBit=1142
CAN2.CalculateTimeQuantum=380.95238095238096
CAN2.IPParameters=CalculateTimeQuantum,CalculateTimeBit,CalculateBaudRate,BS1,BS2
File.Version=6
GPIO.groupedBy=
GPIO.groupedBy=Group By Peripherals
KeepUserPlacement=false
Mcu.CPN=STM32F407IGH6
Mcu.Family=STM32F4
Mcu.IP0=ADC3
Mcu.IP1=CAN1
Mcu.IP10=USART3
Mcu.IP11=USART6
Mcu.IP2=CAN2
Mcu.IP3=NVIC
Mcu.IP4=RCC
Mcu.IP5=SYS
Mcu.IP6=TIM1
Mcu.IP7=TIM4
Mcu.IP8=TIM8
Mcu.IP9=USART1
Mcu.IPNb=12
Mcu.IP0=ADC1
Mcu.IP1=ADC3
Mcu.IP10=TIM8
Mcu.IP11=USART1
Mcu.IP12=USART3
Mcu.IP13=USART6
Mcu.IP2=CAN1
Mcu.IP3=CAN2
Mcu.IP4=I2C2
Mcu.IP5=NVIC
Mcu.IP6=RCC
Mcu.IP7=SYS
Mcu.IP8=TIM1
Mcu.IP9=TIM4
Mcu.IPNb=14
Mcu.Name=STM32F407I(E-G)Hx
Mcu.Package=UFBGA176
Mcu.Pin0=PB5
@@ -41,29 +52,33 @@ Mcu.Pin1=PG14
Mcu.Pin10=PI6
Mcu.Pin11=PG9
Mcu.Pin12=PD1
Mcu.Pin13=PA9
Mcu.Pin14=PH0-OSC_IN
Mcu.Pin15=PH1-OSC_OUT
Mcu.Pin16=PC6
Mcu.Pin17=PF10
Mcu.Pin18=PD14
Mcu.Pin19=PE13
Mcu.Pin13=PF0
Mcu.Pin14=PA9
Mcu.Pin15=PH0-OSC_IN
Mcu.Pin16=PH1-OSC_OUT
Mcu.Pin17=PF1
Mcu.Pin18=PC6
Mcu.Pin19=PF10
Mcu.Pin2=PA14
Mcu.Pin20=PE9
Mcu.Pin21=PE11
Mcu.Pin22=PE14
Mcu.Pin23=VP_SYS_VS_Systick
Mcu.Pin24=VP_TIM1_VS_ClockSourceINT
Mcu.Pin25=VP_TIM4_VS_ClockSourceINT
Mcu.Pin26=VP_TIM8_VS_ClockSourceINT
Mcu.Pin20=PD14
Mcu.Pin21=PE13
Mcu.Pin22=PE9
Mcu.Pin23=PE11
Mcu.Pin24=PE14
Mcu.Pin25=VP_ADC1_TempSens_Input
Mcu.Pin26=VP_ADC1_Vref_Input
Mcu.Pin27=VP_SYS_VS_Systick
Mcu.Pin28=VP_TIM1_VS_ClockSourceINT
Mcu.Pin29=VP_TIM4_VS_ClockSourceINT
Mcu.Pin3=PA13
Mcu.Pin30=VP_TIM8_VS_ClockSourceINT
Mcu.Pin4=PB7
Mcu.Pin5=PB6
Mcu.Pin6=PD0
Mcu.Pin7=PC11
Mcu.Pin8=PC10
Mcu.Pin9=PI7
Mcu.PinsNb=27
Mcu.PinsNb=31
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32F407IGHx
@@ -117,6 +132,10 @@ PE14.Locked=true
PE14.Signal=S_TIM1_CH4
PE9.Locked=true
PE9.Signal=S_TIM1_CH1
PF0.Mode=I2C
PF0.Signal=I2C2_SDA
PF1.Mode=I2C
PF1.Signal=I2C2_SCL
PF10.Locked=true
PF10.Mode=IN8
PF10.Signal=ADC3_IN8
@@ -159,7 +178,7 @@ ProjectManager.StackSize=0x400
ProjectManager.TargetToolchain=MDK-ARM V5
ProjectManager.ToolChainLocation=
ProjectManager.UnderRoot=false
ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_USART1_UART_Init-USART1-false-HAL-true,4-MX_ADC3_Init-ADC3-false-HAL-true,5-MX_CAN1_Init-CAN1-false-HAL-true,6-MX_CAN2_Init-CAN2-false-HAL-true,7-MX_TIM1_Init-TIM1-false-HAL-true,8-MX_TIM4_Init-TIM4-false-HAL-true,9-MX_TIM8_Init-TIM8-false-HAL-true,10-MX_USART3_UART_Init-USART3-false-HAL-true,11-MX_USART6_UART_Init-USART6-false-HAL-true
ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_USART1_UART_Init-USART1-false-HAL-true,4-MX_ADC3_Init-ADC3-false-HAL-true,5-MX_CAN1_Init-CAN1-false-HAL-true,6-MX_CAN2_Init-CAN2-false-HAL-true,7-MX_TIM1_Init-TIM1-false-HAL-true,8-MX_TIM4_Init-TIM4-false-HAL-true,9-MX_TIM8_Init-TIM8-false-HAL-true,10-MX_USART3_UART_Init-USART3-false-HAL-true,11-MX_USART6_UART_Init-USART6-false-HAL-true,12-MX_ADC1_Init-ADC1-false-HAL-true
RCC.48MHZClocksFreq_Value=84000000
RCC.AHBFreq_Value=168000000
RCC.APB1CLKDivider=RCC_HCLK_DIV4
@@ -226,6 +245,10 @@ USART3.IPParameters=VirtualMode
USART3.VirtualMode=VM_ASYNC
USART6.IPParameters=VirtualMode
USART6.VirtualMode=VM_ASYNC
VP_ADC1_TempSens_Input.Mode=IN-TempSens
VP_ADC1_TempSens_Input.Signal=ADC1_TempSens_Input
VP_ADC1_Vref_Input.Mode=IN-Vrefint
VP_ADC1_Vref_Input.Signal=ADC1_Vref_Input
VP_SYS_VS_Systick.Mode=SysTick
VP_SYS_VS_Systick.Signal=SYS_VS_Systick
VP_TIM1_VS_ClockSourceINT.Mode=Internal

View File

@@ -53,7 +53,7 @@
/* #define HAL_SRAM_MODULE_ENABLED */
/* #define HAL_SDRAM_MODULE_ENABLED */
/* #define HAL_HASH_MODULE_ENABLED */
/* #define HAL_I2C_MODULE_ENABLED */
#define HAL_I2C_MODULE_ENABLED
/* #define HAL_I2S_MODULE_ENABLED */
/* #define HAL_IWDG_MODULE_ENABLED */
/* #define HAL_LTDC_MODULE_ENABLED */
@@ -62,7 +62,7 @@
/* #define HAL_SAI_MODULE_ENABLED */
/* #define HAL_SD_MODULE_ENABLED */
/* #define HAL_MMC_MODULE_ENABLED */
#define HAL_SPI_MODULE_ENABLED
/* #define HAL_SPI_MODULE_ENABLED */
#define HAL_TIM_MODULE_ENABLED
#define HAL_UART_MODULE_ENABLED
/* #define HAL_USART_MODULE_ENABLED */

View File

@@ -88,7 +88,18 @@ void HAL_MspInit(void)
void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(hadc->Instance==ADC3)
if(hadc->Instance==ADC1)
{
/* USER CODE BEGIN ADC1_MspInit 0 */
/* USER CODE END ADC1_MspInit 0 */
/* Peripheral clock enable */
__HAL_RCC_ADC1_CLK_ENABLE();
/* USER CODE BEGIN ADC1_MspInit 1 */
/* USER CODE END ADC1_MspInit 1 */
}
else if(hadc->Instance==ADC3)
{
/* USER CODE BEGIN ADC3_MspInit 0 */
@@ -120,7 +131,18 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
*/
void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc)
{
if(hadc->Instance==ADC3)
if(hadc->Instance==ADC1)
{
/* USER CODE BEGIN ADC1_MspDeInit 0 */
/* USER CODE END ADC1_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_ADC1_CLK_DISABLE();
/* USER CODE BEGIN ADC1_MspDeInit 1 */
/* USER CODE END ADC1_MspDeInit 1 */
}
else if(hadc->Instance==ADC3)
{
/* USER CODE BEGIN ADC3_MspDeInit 0 */
@@ -264,68 +286,68 @@ void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan)
}
/**
* @brief SPI MSP Initialization
* @brief I2C MSP Initialization
* This function configures the hardware resources used in this example
* @param hspi: SPI handle pointer
* @param hi2c: I2C handle pointer
* @retval None
*/
void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(hspi->Instance==SPI2)
if(hi2c->Instance==I2C2)
{
/* USER CODE BEGIN SPI2_MspInit 0 */
/* USER CODE BEGIN I2C2_MspInit 0 */
/* USER CODE END SPI2_MspInit 0 */
/* Peripheral clock enable */
__HAL_RCC_SPI2_CLK_ENABLE();
/* USER CODE END I2C2_MspInit 0 */
__HAL_RCC_GPIOB_CLK_ENABLE();
/**SPI2 GPIO Configuration
PB13 ------> SPI2_SCK
PB14 ------> SPI2_MISO
PB15 ------> SPI2_MOSI
__HAL_RCC_GPIOF_CLK_ENABLE();
/**I2C2 GPIO Configuration
PF0 ------> I2C2_SDA
PF1 ------> I2C2_SCL
*/
GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_InitStruct.Alternate = GPIO_AF4_I2C2;
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
/* USER CODE BEGIN SPI2_MspInit 1 */
/* Peripheral clock enable */
__HAL_RCC_I2C2_CLK_ENABLE();
/* USER CODE BEGIN I2C2_MspInit 1 */
/* USER CODE END SPI2_MspInit 1 */
/* USER CODE END I2C2_MspInit 1 */
}
}
/**
* @brief SPI MSP De-Initialization
* @brief I2C MSP De-Initialization
* This function freeze the hardware resources used in this example
* @param hspi: SPI handle pointer
* @param hi2c: I2C handle pointer
* @retval None
*/
void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi)
void HAL_I2C_MspDeInit(I2C_HandleTypeDef* hi2c)
{
if(hspi->Instance==SPI2)
if(hi2c->Instance==I2C2)
{
/* USER CODE BEGIN SPI2_MspDeInit 0 */
/* USER CODE BEGIN I2C2_MspDeInit 0 */
/* USER CODE END SPI2_MspDeInit 0 */
/* USER CODE END I2C2_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_SPI2_CLK_DISABLE();
__HAL_RCC_I2C2_CLK_DISABLE();
/**SPI2 GPIO Configuration
PB13 ------> SPI2_SCK
PB14 ------> SPI2_MISO
PB15 ------> SPI2_MOSI
/**I2C2 GPIO Configuration
PF0 ------> I2C2_SDA
PF1 ------> I2C2_SCL
*/
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15);
HAL_GPIO_DeInit(GPIOF, GPIO_PIN_0);
/* USER CODE BEGIN SPI2_MspDeInit 1 */
HAL_GPIO_DeInit(GPIOF, GPIO_PIN_1);
/* USER CODE END SPI2_MspDeInit 1 */
/* USER CODE BEGIN I2C2_MspDeInit 1 */
/* USER CODE END I2C2_MspDeInit 1 */
}
}

View File

@@ -9,6 +9,29 @@ config SOC_STM32F407IG
menu "Onboard Peripheral Drivers"
config BSP_USING_ARDUINO
bool "Compatible with Arduino Ecosystem (RTduino)"
select PKG_USING_RTDUINO
select BSP_USING_STLINK_TO_USART
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_PWM1_CH2
select BSP_USING_PWM1_CH3
select BSP_USING_PWM1_CH4
select BSP_USING_PWM8
select BSP_USING_PWM8_CH1
select BSP_USING_PWM8_CH2
select BSP_USING_PWM8_CH3
select BSP_USING_I2C
select BSP_USING_I2C1
imply RTDUINO_USING_SERVO
imply RTDUINO_USING_WIRE
default n
endmenu
menu "On-chip Peripheral Drivers"
@@ -118,6 +141,9 @@ menu "On-chip Peripheral Drivers"
default n
select RT_USING_ADC
if BSP_USING_ADC
config BSP_USING_ADC1
bool "Enable ADC1"
default n
config BSP_USING_ADC3
bool "Enable ADC3"
default n
@@ -151,6 +177,7 @@ menu "On-chip Peripheral Drivers"
select RT_USING_I2C_BITOPS
select RT_USING_PIN
if BSP_USING_I2C1
comment "Notice: PF0 --> 80; PF1 --> 81"
config BSP_I2C1_SCL_PIN
int "i2c1 scl pin number"
default 81