初级会员

- 积分
- 53
- 金钱
- 53
- 注册时间
- 2018-1-15
- 在线时间
- 22 小时
|
5金钱
本帖最后由 bob7452 于 2018-8-1 15:14 编辑
照着下列代码编写结果GPIO抓不到输出
/*************************************************************/
有两个问题想提问:
1.参考代码中设置了PWM输出,但却是用HAL_TIM_Base_Init(&htim1) ,为何不是用HAL_TIM_PWM_Init(&htim1)?
2.照着代码编写GPIO无输出,请问大佬们是哪段代码有错误
/*************************************************************/
操作环境: keil V5.14.0
参考代码: http://jiaodi.tech/2018/05/07/stm32f767-pwm/
/*************************************************************/
[mw_shl_code=c,true]
pwm.c
#include "pwm.h"
/*TIM8 Handler*/
TIM_HandleTypeDef TIM8_Handler;
TIM_OC_InitTypeDef sConfigOC;
void TIM8_PWM_Init(u16 prescaler,u16 period)
{
/*TIM_ClockConfigTypeDef sClockSourceConfig;*/
TIM_MasterConfigTypeDef sMasterConfig;
TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig;
/*Timer Base Setting*/
TIM8_Handler.Instance = TIM8; //TIM8
TIM8_Handler.Init.Prescaler = prescaler; //Timer prescaler
TIM8_Handler.Init.CounterMode = TIM_COUNTERMODE_UP;
TIM8_Handler.Init.Period = period; //arr
TIM8_Handler.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; //CLOCK DIVISION
TIM8_Handler.Init.RepetitionCounter=0;
HAL_TIM_PWM_Init(&TIM8_Handler); // ---> Start HAL_TIM_MspInit
/*ClockSource Setting*/
sClockSourceConfig.ClockSource=TIM_CLOCKSOURCE_INTERNAL;
HAL_TIM_ConfigClockSource(&TIM8_Handler, &sClockSourceConfig);
/*MasterConfigTypeDef Setting*/
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
HAL_TIMEx_MasterConfigSynchronization(&TIM8_Handler, &sMasterConfig);
/*PWM Mode Setting*/
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 20;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
/*CHANNEL1*/
HAL_TIM_PWM_ConfigChannel(&TIM8_Handler, &sConfigOC, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&TIM8_Handler, TIM_CHANNEL_1);
HAL_TIMEx_PWMN_Start(&TIM8_Handler, TIM_CHANNEL_1); // turn on complementary channel
/*CHANNEL2*/
sConfigOC.Pulse = 30;
HAL_TIM_PWM_ConfigChannel(&TIM8_Handler, &sConfigOC, TIM_CHANNEL_2);
HAL_TIM_PWM_Start(&TIM8_Handler, TIM_CHANNEL_2);
HAL_TIMEx_PWMN_Start(&TIM8_Handler, TIM_CHANNEL_2); // turn on complementary channel
/*CHANNEL3*/
sConfigOC.Pulse = 40;
HAL_TIM_PWM_ConfigChannel(&TIM8_Handler, &sConfigOC, TIM_CHANNEL_3);
HAL_TIM_PWM_Start(&TIM8_Handler, TIM_CHANNEL_3);
HAL_TIMEx_PWMN_Start(&TIM8_Handler, TIM_CHANNEL_3); // turn on complementary channel
/*BreakDeadTime Setting*/
sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
sBreakDeadTimeConfig.DeadTime = 100;
sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
sBreakDeadTimeConfig.BreakFilter = 0;
sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE;
sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH;
sBreakDeadTimeConfig.Break2Filter = 0;
sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
HAL_TIMEx_ConfigBreakDeadTime(&TIM8_Handler, &sBreakDeadTimeConfig);
}
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
{
if(htim->Instance==TIM8)
{
GPIO_InitTypeDef GPIO_InitStruct;
/*Set up TIM8 CLK*/
__HAL_RCC_TIM8_CLK_ENABLE();
/*Set Up GPIO CLK */
__HAL_RCC_GPIOI_CLK_ENABLE();
__HAL_RCC_GPIOH_CLK_ENABLE();
/*Set Up PWM Output Pin */
GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF3_TIM8;
HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);
/*Set Up PWM Output Pin N*/
GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF3_TIM8;
HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
}
}[/mw_shl_code]
/*********************************************************************/
[mw_shl_code=c,true]
pwm.h
#ifndef _PWM_H
#define _PWM_H
#include <sys.h>
extern TIM_ClockConfigTypeDef sClockSourceConfig;
extern TIM_MasterConfigTypeDef sMasterConfig;
extern TIM_OC_InitTypeDef sConfigOC;
extern TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig;
extern TIM_HandleTypeDef TIM8_Handler;
void TIM_SetTIM3Compare4(u32 compare);
void TIM8_PWM_Init(u16 prescaler,u16 period);
#endif[/mw_shl_code]
/*****************************************************************************************/
[mw_shl_code=c,true]
main.c
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "pwm.h"
int main(void)
{
Cache_Enable();
HAL_Init();
Stm32_Clock_Init(432,25,2,9);
delay_init(216);
uart_init(115200);
TIM8_PWM_Init(216-1 ,100-1);
while(1)
{
}
}
[/mw_shl_code]
|
|