stm32f103控制4个模式管进行逆变的代码
时间: 2023-08-06 22:09:49 浏览: 36
以下是基于STM32F103控制4个模式管进行逆变的示例代码,仅供参考:
```c
#include "stm32f10x.h"
#define PWM_FREQ 20000 // PWM频率
#define PWM_PERIOD (72000000 / PWM_FREQ) // PWM周期
#define PWM_PRESCALER 0 // PWM预分频系数
#define PWM_MIN_DUTY_CYCLE 0 // PWM最小占空比
#define PWM_MAX_DUTY_CYCLE (PWM_PERIOD - 1) // PWM最大占空比
#define PWM_TIM TIM3 // PWM使用的定时器
#define PWM_TIM_RCC RCC_APB1Periph_TIM3 // PWM定时器的时钟
#define MODE_PIN_1 GPIO_Pin_0 // 模式管1的GPIO引脚
#define MODE_PIN_2 GPIO_Pin_1 // 模式管2的GPIO引脚
#define MODE_PIN_3 GPIO_Pin_2 // 模式管3的GPIO引脚
#define MODE_PIN_4 GPIO_Pin_3 // 模式管4的GPIO引脚
#define MODE_GPIO GPIOA // 模式管的GPIO端口
#define MODE_GPIO_RCC RCC_APB2Periph_GPIOA // 模式管的GPIO时钟
uint16_t pwm_duty_cycle[4]; // PWM占空比数组,下标分别对应4个模式管
void PWM_init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
TIM_OCInitTypeDef TIM_OCInitStruct;
RCC_APB1PeriphClockCmd(PWM_TIM_RCC, ENABLE);
TIM_TimeBaseInitStruct.TIM_Prescaler = PWM_PRESCALER;
TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInitStruct.TIM_Period = PWM_PERIOD - 1;
TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(PWM_TIM, &TIM_TimeBaseInitStruct);
TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStruct.TIM_Pulse = PWM_MIN_DUTY_CYCLE;
TIM_OCInitStruct.TIM_OCIdleState = TIM_OCIdleState_Reset;
TIM_OCInitStruct.TIM_OCNIdleState = TIM_OCNIdleState_Reset;
TIM_OC1Init(PWM_TIM, &TIM_OCInitStruct);
TIM_OC2Init(PWM_TIM, &TIM_OCInitStruct);
TIM_OC3Init(PWM_TIM, &TIM_OCInitStruct);
TIM_OC4Init(PWM_TIM, &TIM_OCInitStruct);
TIM_Cmd(PWM_TIM, ENABLE);
}
void MODE_GPIO_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(MODE_GPIO_RCC, ENABLE);
GPIO_InitStruct.GPIO_Pin = MODE_PIN_1 | MODE_PIN_2 | MODE_PIN_3 | MODE_PIN_4;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(MODE_GPIO, &GPIO_InitStruct);
GPIO_SetBits(MODE_GPIO, MODE_PIN_1 | MODE_PIN_2 | MODE_PIN_3 | MODE_PIN_4);
}
void set_pwm_duty_cycle(uint8_t mode, uint16_t duty_cycle)
{
if (duty_cycle < PWM_MIN_DUTY_CYCLE) {
duty_cycle = PWM_MIN_DUTY_CYCLE;
} else if (duty_cycle > PWM_MAX_DUTY_CYCLE) {
duty_cycle = PWM_MAX_DUTY_CYCLE;
}
pwm_duty_cycle[mode - 1] = duty_cycle;
switch (mode) {
case 1:
TIM_SetCompare1(PWM_TIM, duty_cycle);
break;
case 2:
TIM_SetCompare2(PWM_TIM, duty_cycle);
break;
case 3:
TIM_SetCompare3(PWM_TIM, duty_cycle);
break;
case 4:
TIM_SetCompare4(PWM_TIM, duty_cycle);
break;
default:
break;
}
}
void set_mode(uint8_t mode, uint8_t state)
{
if (state) {
GPIO_SetBits(MODE_GPIO, 1 << (mode - 1));
} else {
GPIO_ResetBits(MODE_GPIO, 1 << (mode - 1));
}
}
int main(void)
{
PWM_init();
MODE_GPIO_init();
while (1) {
// 设置模式管1-4的占空比
set_pwm_duty_cycle(1, 1000);
set_pwm_duty_cycle(2, 2000);
set_pwm_duty_cycle(3, 3000);
set_pwm_duty_cycle(4, 4000);
// 设置模式管1-4的状态
set_mode(1, 1);
set_mode(2, 0);
set_mode(3, 1);
set_mode(4, 0);
// 等待一段时间
for (volatile int i = 0; i < 1000000; ++i);
}
}
```
该代码需要使用STM32F10x标准外设库进行编译。该代码中使用TIM3作为PWM定时器,使用PA0-PA3作为模式管的GPIO引脚。在主循环中,设置了模式管1-4的占空比和状态,并等待一段时间后再进行下一次设置。您可以根据自己的具体应用场景修改代码。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)