Merge pull request #2967 from wuhanstudio/add-pwm

Add pwm
This commit is contained in:
Bernard Xiong 2019-08-19 16:37:53 +08:00 committed by GitHub
commit e69f4c456f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 200 additions and 25 deletions

View File

@ -38,18 +38,18 @@ yf-ufun STM32F103 是优凡(天津)科技有限公司推出的一款基于 A
| **板载外设** | **支持情况** | **备注** | | **板载外设** | **支持情况** | **备注** |
| :----------------- | :----------: | :------------------------------------| | :----------------- | :----------: | :------------------------------------|
| USB 转串口 | 支持 | | | USB 转串口 | 支持 | |
| 蜂鸣器 | 暂不支持 | | | 蜂鸣器 | 支持 | |
| LED | 支持 | | | LED | 支持 | |
| RGB LED | 暂不支持 | | | RGB LED | 支持 | |
| 触摸按键 | 暂不支持 | | | 触摸按键 | 暂不支持 | |
| **片上外设** | **支持情况** | **备注** | | **片上外设** | **支持情况** | **备注** |
| GPIO | 支持 | PA0-PA14PB0-PB15PC0-PC5PC7-PC12 | | GPIO | 支持 | PA0-PA14PB0-PB15PC0-PC5PC7-PC12 |
| UART | 支持 | UART1 | | UART | 支持 | UART1 |
| SPI | 暂不支持 | | | SPI | 支持 | SPI1 |
| I2C | 暂不支持 | | | I2C | 支持 | 软件 I2C |
| SDIO | 暂不支持 | | | SDIO | 支持 | |
| RTC | 暂不支持 | | | RTC | 暂不支持 | |
| PWM | 暂不支持 | | | PWM | 支持 | |
| USB Device | 暂不支持 | | | USB Device | 暂不支持 | |
| USB Host | 暂不支持 | | | USB Host | 暂不支持 | |
| IWG | 暂不支持 | | | IWG | 暂不支持 | |

View File

@ -1,7 +1,7 @@
[PreviousGenFiles] [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; 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; SourceFiles=stm32f1xx_it.c;stm32f1xx_hal_msp.c;main.c;
[PreviousLibFiles] [PreviousLibFiles]

View File

@ -6,26 +6,30 @@ Mcu.IP0=NVIC
Mcu.IP1=RCC Mcu.IP1=RCC
Mcu.IP2=SDIO Mcu.IP2=SDIO
Mcu.IP3=SYS Mcu.IP3=SYS
Mcu.IP4=USART1 Mcu.IP4=TIM2
Mcu.IPNb=5 Mcu.IP5=USART1
Mcu.IPNb=6
Mcu.Name=STM32F103R(C-D-E)Tx Mcu.Name=STM32F103R(C-D-E)Tx
Mcu.Package=LQFP64 Mcu.Package=LQFP64
Mcu.Pin0=PC14-OSC32_IN Mcu.Pin0=PC14-OSC32_IN
Mcu.Pin1=PC15-OSC32_OUT Mcu.Pin1=PC15-OSC32_OUT
Mcu.Pin10=PC10 Mcu.Pin10=PA10
Mcu.Pin11=PC11 Mcu.Pin11=PA13
Mcu.Pin12=PC12 Mcu.Pin12=PA14
Mcu.Pin13=PD2 Mcu.Pin13=PC10
Mcu.Pin14=VP_SYS_VS_Systick Mcu.Pin14=PC11
Mcu.Pin15=PC12
Mcu.Pin16=PD2
Mcu.Pin17=VP_SYS_VS_Systick
Mcu.Pin2=PD0-OSC_IN Mcu.Pin2=PD0-OSC_IN
Mcu.Pin3=PD1-OSC_OUT Mcu.Pin3=PD1-OSC_OUT
Mcu.Pin4=PC8 Mcu.Pin4=PA0-WKUP
Mcu.Pin5=PC9 Mcu.Pin5=PA1
Mcu.Pin6=PA9 Mcu.Pin6=PA2
Mcu.Pin7=PA10 Mcu.Pin7=PC8
Mcu.Pin8=PA13 Mcu.Pin8=PC9
Mcu.Pin9=PA14 Mcu.Pin9=PA9
Mcu.PinsNb=15 Mcu.PinsNb=18
Mcu.ThirdPartyNb=0 Mcu.ThirdPartyNb=0
Mcu.UserConstants= Mcu.UserConstants=
Mcu.UserName=STM32F103RCTx Mcu.UserName=STM32F103RCTx
@ -41,12 +45,15 @@ NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false
NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false\:true NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false\:true
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false 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.Mode=Asynchronous
PA10.Signal=USART1_RX PA10.Signal=USART1_RX
PA13.Mode=Serial_Wire PA13.Mode=Serial_Wire
PA13.Signal=SYS_JTMS-SWDIO PA13.Signal=SYS_JTMS-SWDIO
PA14.Mode=Serial_Wire PA14.Mode=Serial_Wire
PA14.Signal=SYS_JTCK-SWCLK PA14.Signal=SYS_JTCK-SWCLK
PA2.Signal=S_TIM2_CH3
PA9.Mode=Asynchronous PA9.Mode=Asynchronous
PA9.Signal=USART1_TX PA9.Signal=USART1_TX
PC10.Mode=SD_4_bits_Wide_bus 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.Mode=SD_4_bits_Wide_bus
PD2.Signal=SDIO_CMD PD2.Signal=SDIO_CMD
PinOutPanel.RotationAngle=0 PinOutPanel.RotationAngle=0
ProjectManager.AskForMigrate=true ProjectManager.AskForMigrate=false
ProjectManager.BackupPrevious=false ProjectManager.BackupPrevious=false
ProjectManager.CompilerOptimize=6 ProjectManager.CompilerOptimize=6
ProjectManager.ComputerToolchain=false ProjectManager.ComputerToolchain=false
@ -131,6 +138,16 @@ RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
RCC.TimSysFreq_Value=72000000 RCC.TimSysFreq_Value=72000000
RCC.USBFreq_Value=72000000 RCC.USBFreq_Value=72000000
RCC.VCOOutput2Freq_Value=12000000 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.IPParameters=VirtualMode
USART1.VirtualMode=VM_ASYNC USART1.VirtualMode=VM_ASYNC
VP_SYS_VS_Systick.Mode=SysTick VP_SYS_VS_Systick.Mode=SysTick

View File

@ -70,6 +70,8 @@ extern "C" {
/* USER CODE END EM */ /* USER CODE END EM */
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
/* Exported functions prototypes ---------------------------------------------*/ /* Exported functions prototypes ---------------------------------------------*/
void Error_Handler(void); void Error_Handler(void);

View File

@ -78,7 +78,7 @@
/*#define HAL_SMARTCARD_MODULE_ENABLED */ /*#define HAL_SMARTCARD_MODULE_ENABLED */
/*#define HAL_SPI_MODULE_ENABLED */ /*#define HAL_SPI_MODULE_ENABLED */
/*#define HAL_SRAM_MODULE_ENABLED */ /*#define HAL_SRAM_MODULE_ENABLED */
/*#define HAL_TIM_MODULE_ENABLED */ #define HAL_TIM_MODULE_ENABLED
#define HAL_UART_MODULE_ENABLED #define HAL_UART_MODULE_ENABLED
/*#define HAL_USART_MODULE_ENABLED */ /*#define HAL_USART_MODULE_ENABLED */
/*#define HAL_WWDG_MODULE_ENABLED */ /*#define HAL_WWDG_MODULE_ENABLED */

View File

@ -64,6 +64,8 @@
/* Private variables ---------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/
SD_HandleTypeDef hsd; SD_HandleTypeDef hsd;
TIM_HandleTypeDef htim2;
UART_HandleTypeDef huart1; UART_HandleTypeDef huart1;
/* USER CODE BEGIN PV */ /* USER CODE BEGIN PV */
@ -76,6 +78,7 @@ void SystemClock_Config(void);
static void MX_GPIO_Init(void); static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void); static void MX_USART1_UART_Init(void);
static void MX_SDIO_SD_Init(void); static void MX_SDIO_SD_Init(void);
static void MX_TIM2_Init(void);
/* USER CODE BEGIN PFP */ /* USER CODE BEGIN PFP */
/* Private function prototypes -----------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/
@ -117,6 +120,7 @@ int main(void)
MX_GPIO_Init(); MX_GPIO_Init();
MX_USART1_UART_Init(); MX_USART1_UART_Init();
MX_SDIO_SD_Init(); MX_SDIO_SD_Init();
MX_TIM2_Init();
/* USER CODE BEGIN 2 */ /* USER CODE BEGIN 2 */
/* USER CODE END 2 */ /* USER CODE END 2 */
@ -207,6 +211,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 * @brief USART1 Initialization Function
* @param None * @param None

View File

@ -78,7 +78,9 @@
/* USER CODE BEGIN 0 */ /* USER CODE BEGIN 0 */
/* USER CODE END 0 */ /* USER CODE END 0 */
/**
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
/**
* Initializes the Global MSP. * Initializes the Global MSP.
*/ */
void HAL_MspInit(void) void HAL_MspInit(void)
@ -182,6 +184,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 * @brief UART MSP Initialization
* This function configures the hardware resources used in this example * This function configures the hardware resources used in this example

View File

@ -69,6 +69,29 @@ menu "On-chip Peripheral Drivers"
default 16 default 16
endif 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 config BSP_USING_SDIO
bool "Enable SDCARD (sdio)" bool "Enable SDCARD (sdio)"
select RT_USING_SDIO select RT_USING_SDIO