summaryrefslogtreecommitdiff
path: root/bsp/stm32
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2019-08-19 16:37:53 +0800
committerGitHub <[email protected]>2019-08-19 16:37:53 +0800
commite69f4c456f96c5028252da51544f2d4ef6feca81 (patch)
treef236845ab0d4b67344abf5540f289c9bbe81057b /bsp/stm32
parent70d6d3674a4a912f7b5f0e21cb1effbcb7d54bfa (diff)
parenta1a7621b87a9ec706a4c86f525e907dc7589ab12 (diff)
Merge pull request #2967 from wuhanstudio/add-pwm
Add pwm
Diffstat (limited to 'bsp/stm32')
-rw-r--r--bsp/stm32/stm32f103-yf-ufun/README.md12
-rw-r--r--bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/.mxproject4
-rw-r--r--bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/CubeMX_Config.ioc47
-rw-r--r--bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/Inc/main.h2
-rw-r--r--bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h2
-rw-r--r--bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/Src/main.c61
-rw-r--r--bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c74
-rw-r--r--bsp/stm32/stm32f103-yf-ufun/board/Kconfig23
8 files changed, 200 insertions, 25 deletions
diff --git a/bsp/stm32/stm32f103-yf-ufun/README.md b/bsp/stm32/stm32f103-yf-ufun/README.md
index f94cff5f4f..2db8a6220e 100644
--- a/bsp/stm32/stm32f103-yf-ufun/README.md
+++ b/bsp/stm32/stm32f103-yf-ufun/README.md
@@ -38,18 +38,18 @@ yf-ufun STM32F103 是优凡(天津)科技有限公司推出的一款基于 A
| **板载外设** | **支持情况** | **备注** |
| :----------------- | :----------: | :------------------------------------|
| USB 转串口 | 支持 | |
-| 蜂鸣器 | 暂不支持 | |
+| 蜂鸣器 | 支持 | |
| LED | 支持 | |
-| RGB LED | 暂不支持 | |
+| RGB LED | 支持 | |
| 触摸按键 | 暂不支持 | |
| **片上外设** | **支持情况** | **备注** |
| GPIO | 支持 | PA0-PA14,PB0-PB15,PC0-PC5,PC7-PC12 |
| UART | 支持 | UART1 |
-| SPI | 暂不支持 | |
-| I2C | 暂不支持 | |
-| SDIO | 暂不支持 | |
+| SPI | 支持 | SPI1 |
+| I2C | 支持 | 软件 I2C |
+| SDIO | 支持 | |
| RTC | 暂不支持 | |
-| PWM | 暂不支持 | |
+| PWM | 支持 | |
| USB Device | 暂不支持 | |
| USB Host | 暂不支持 | |
| IWG | 暂不支持 | |
diff --git a/bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/.mxproject b/bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/.mxproject
index d11d9a0a7e..e5268a1317 100644
--- a/bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/.mxproject
+++ b/bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/.mxproject
@@ -1,7 +1,7 @@
[PreviousGenFiles]
-HeaderPath=F:/rt-thread/bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/Inc
+HeaderPath=D:/rt-thread/bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/Inc
HeaderFiles=stm32f1xx_it.h;stm32f1xx_hal_conf.h;main.h;
-SourcePath=F:/rt-thread/bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/Src
+SourcePath=D:/rt-thread/bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/Src
SourceFiles=stm32f1xx_it.c;stm32f1xx_hal_msp.c;main.c;
[PreviousLibFiles]
diff --git a/bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/CubeMX_Config.ioc b/bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/CubeMX_Config.ioc
index b476a67e6f..8f0ebe34a9 100644
--- a/bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/CubeMX_Config.ioc
+++ b/bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/CubeMX_Config.ioc
@@ -6,26 +6,30 @@ Mcu.IP0=NVIC
Mcu.IP1=RCC
Mcu.IP2=SDIO
Mcu.IP3=SYS
-Mcu.IP4=USART1
-Mcu.IPNb=5
+Mcu.IP4=TIM2
+Mcu.IP5=USART1
+Mcu.IPNb=6
Mcu.Name=STM32F103R(C-D-E)Tx
Mcu.Package=LQFP64
Mcu.Pin0=PC14-OSC32_IN
Mcu.Pin1=PC15-OSC32_OUT
-Mcu.Pin10=PC10
-Mcu.Pin11=PC11
-Mcu.Pin12=PC12
-Mcu.Pin13=PD2
-Mcu.Pin14=VP_SYS_VS_Systick
+Mcu.Pin10=PA10
+Mcu.Pin11=PA13
+Mcu.Pin12=PA14
+Mcu.Pin13=PC10
+Mcu.Pin14=PC11
+Mcu.Pin15=PC12
+Mcu.Pin16=PD2
+Mcu.Pin17=VP_SYS_VS_Systick
Mcu.Pin2=PD0-OSC_IN
Mcu.Pin3=PD1-OSC_OUT
-Mcu.Pin4=PC8
-Mcu.Pin5=PC9
-Mcu.Pin6=PA9
-Mcu.Pin7=PA10
-Mcu.Pin8=PA13
-Mcu.Pin9=PA14
-Mcu.PinsNb=15
+Mcu.Pin4=PA0-WKUP
+Mcu.Pin5=PA1
+Mcu.Pin6=PA2
+Mcu.Pin7=PC8
+Mcu.Pin8=PC9
+Mcu.Pin9=PA9
+Mcu.PinsNb=18
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32F103RCTx
@@ -41,12 +45,15 @@ NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false
NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false\:true
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false
+PA0-WKUP.Signal=S_TIM2_CH1_ETR
+PA1.Signal=S_TIM2_CH2
PA10.Mode=Asynchronous
PA10.Signal=USART1_RX
PA13.Mode=Serial_Wire
PA13.Signal=SYS_JTMS-SWDIO
PA14.Mode=Serial_Wire
PA14.Signal=SYS_JTCK-SWCLK
+PA2.Signal=S_TIM2_CH3
PA9.Mode=Asynchronous
PA9.Signal=USART1_TX
PC10.Mode=SD_4_bits_Wide_bus
@@ -78,7 +85,7 @@ PD1-OSC_OUT.Signal=RCC_OSC_OUT
PD2.Mode=SD_4_bits_Wide_bus
PD2.Signal=SDIO_CMD
PinOutPanel.RotationAngle=0
-ProjectManager.AskForMigrate=true
+ProjectManager.AskForMigrate=false
ProjectManager.BackupPrevious=false
ProjectManager.CompilerOptimize=6
ProjectManager.ComputerToolchain=false
@@ -131,6 +138,16 @@ RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
RCC.TimSysFreq_Value=72000000
RCC.USBFreq_Value=72000000
RCC.VCOOutput2Freq_Value=12000000
+SH.S_TIM2_CH1_ETR.0=TIM2_CH1,PWM Generation1 CH1
+SH.S_TIM2_CH1_ETR.ConfNb=1
+SH.S_TIM2_CH2.0=TIM2_CH2,PWM Generation2 CH2
+SH.S_TIM2_CH2.ConfNb=1
+SH.S_TIM2_CH3.0=TIM2_CH3,PWM Generation3 CH3
+SH.S_TIM2_CH3.ConfNb=1
+TIM2.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1
+TIM2.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2
+TIM2.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3
+TIM2.IPParameters=Channel-PWM Generation1 CH1,Channel-PWM Generation2 CH2,Channel-PWM Generation3 CH3
USART1.IPParameters=VirtualMode
USART1.VirtualMode=VM_ASYNC
VP_SYS_VS_Systick.Mode=SysTick
diff --git a/bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/Inc/main.h b/bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/Inc/main.h
index d956854a25..35b4a0c569 100644
--- a/bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/Inc/main.h
+++ b/bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/Inc/main.h
@@ -70,6 +70,8 @@ extern "C" {
/* USER CODE END EM */
+void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
+
/* Exported functions prototypes ---------------------------------------------*/
void Error_Handler(void);
diff --git a/bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h b/bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h
index c6848ab7a3..3b89babf9f 100644
--- a/bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h
+++ b/bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h
@@ -78,7 +78,7 @@
/*#define HAL_SMARTCARD_MODULE_ENABLED */
/*#define HAL_SPI_MODULE_ENABLED */
/*#define HAL_SRAM_MODULE_ENABLED */
-/*#define HAL_TIM_MODULE_ENABLED */
+#define HAL_TIM_MODULE_ENABLED
#define HAL_UART_MODULE_ENABLED
/*#define HAL_USART_MODULE_ENABLED */
/*#define HAL_WWDG_MODULE_ENABLED */
diff --git a/bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/Src/main.c b/bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/Src/main.c
index b4f77bfd38..93f3f82c81 100644
--- a/bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/Src/main.c
+++ b/bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/Src/main.c
@@ -64,6 +64,8 @@
/* Private variables ---------------------------------------------------------*/
SD_HandleTypeDef hsd;
+TIM_HandleTypeDef htim2;
+
UART_HandleTypeDef huart1;
/* USER CODE BEGIN PV */
@@ -76,6 +78,7 @@ void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);
static void MX_SDIO_SD_Init(void);
+static void MX_TIM2_Init(void);
/* USER CODE BEGIN PFP */
/* Private function prototypes -----------------------------------------------*/
@@ -117,6 +120,7 @@ int main(void)
MX_GPIO_Init();
MX_USART1_UART_Init();
MX_SDIO_SD_Init();
+ MX_TIM2_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
@@ -208,6 +212,63 @@ static void MX_SDIO_SD_Init(void)
}
/**
+ * @brief TIM2 Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_TIM2_Init(void)
+{
+
+ /* USER CODE BEGIN TIM2_Init 0 */
+
+ /* USER CODE END TIM2_Init 0 */
+
+ TIM_MasterConfigTypeDef sMasterConfig = {0};
+ TIM_OC_InitTypeDef sConfigOC = {0};
+
+ /* USER CODE BEGIN TIM2_Init 1 */
+
+ /* USER CODE END TIM2_Init 1 */
+ htim2.Instance = TIM2;
+ htim2.Init.Prescaler = 0;
+ htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
+ htim2.Init.Period = 0;
+ htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
+ htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
+ if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
+ sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
+ if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ sConfigOC.OCMode = TIM_OCMODE_PWM1;
+ sConfigOC.Pulse = 0;
+ sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
+ sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
+ if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN TIM2_Init 2 */
+
+ /* USER CODE END TIM2_Init 2 */
+ HAL_TIM_MspPostInit(&htim2);
+
+}
+
+/**
* @brief USART1 Initialization Function
* @param None
* @retval None
diff --git a/bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c b/bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c
index 7dbeb562fd..67d2da43eb 100644
--- a/bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c
+++ b/bsp/stm32/stm32f103-yf-ufun/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c
@@ -78,7 +78,9 @@
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
-/**
+
+void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
+ /**
* Initializes the Global MSP.
*/
void HAL_MspInit(void)
@@ -183,6 +185,76 @@ void HAL_SD_MspDeInit(SD_HandleTypeDef* hsd)
}
/**
+* @brief TIM_PWM MSP Initialization
+* This function configures the hardware resources used in this example
+* @param htim_pwm: TIM_PWM handle pointer
+* @retval None
+*/
+void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* htim_pwm)
+{
+ if(htim_pwm->Instance==TIM2)
+ {
+ /* USER CODE BEGIN TIM2_MspInit 0 */
+
+ /* USER CODE END TIM2_MspInit 0 */
+ /* Peripheral clock enable */
+ __HAL_RCC_TIM2_CLK_ENABLE();
+ /* USER CODE BEGIN TIM2_MspInit 1 */
+
+ /* USER CODE END TIM2_MspInit 1 */
+ }
+
+}
+
+void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim)
+{
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ if(htim->Instance==TIM2)
+ {
+ /* USER CODE BEGIN TIM2_MspPostInit 0 */
+
+ /* USER CODE END TIM2_MspPostInit 0 */
+
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ /**TIM2 GPIO Configuration
+ PA0-WKUP ------> TIM2_CH1
+ PA1 ------> TIM2_CH2
+ PA2 ------> TIM2_CH3
+ */
+ GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+
+ /* USER CODE BEGIN TIM2_MspPostInit 1 */
+
+ /* USER CODE END TIM2_MspPostInit 1 */
+ }
+
+}
+/**
+* @brief TIM_PWM MSP De-Initialization
+* This function freeze the hardware resources used in this example
+* @param htim_pwm: TIM_PWM handle pointer
+* @retval None
+*/
+void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef* htim_pwm)
+{
+ if(htim_pwm->Instance==TIM2)
+ {
+ /* USER CODE BEGIN TIM2_MspDeInit 0 */
+
+ /* USER CODE END TIM2_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_TIM2_CLK_DISABLE();
+ /* USER CODE BEGIN TIM2_MspDeInit 1 */
+
+ /* USER CODE END TIM2_MspDeInit 1 */
+ }
+
+}
+
+/**
* @brief UART MSP Initialization
* This function configures the hardware resources used in this example
* @param huart: UART handle pointer
diff --git a/bsp/stm32/stm32f103-yf-ufun/board/Kconfig b/bsp/stm32/stm32f103-yf-ufun/board/Kconfig
index 0265de83c7..6f81de4993 100644
--- a/bsp/stm32/stm32f103-yf-ufun/board/Kconfig
+++ b/bsp/stm32/stm32f103-yf-ufun/board/Kconfig
@@ -69,6 +69,29 @@ menu "On-chip Peripheral Drivers"
default 16
endif
+ menuconfig BSP_USING_PWM
+ bool "Enable PWM"
+ default n
+ select RT_USING_PWM
+ if BSP_USING_PWM
+ menuconfig BSP_USING_PWM2
+ bool "Enable timer2 output pwm"
+ default n
+ if BSP_USING_PWM2
+ config BSP_USING_PWM2_CH1
+ bool "Enable PWM2 channel 1"
+ default n
+
+ config BSP_USING_PWM2_CH2
+ bool "Enable PWM2 channel 2"
+ default n
+
+ config BSP_USING_PWM2_CH3
+ bool "Enable PWM2 channel 3"
+ default n
+ endif
+ endif
+
config BSP_USING_SDIO
bool "Enable SDCARD (sdio)"
select RT_USING_SDIO