在线时间0 小时
UID11902
ST金币0
蝴蝶豆0
注册时间2007-9-6
新手上路
- 最后登录
- 1970-1-1
|
a0a.1 0b0c
想在PB6为低电平的时候,PA.6输出PWM波形,PB6高电平的时候,PA.6没有输出。仿真的时候是正确的,可下载到PCB的时候,无论PB6是什么状态,PA6都有输出,下面是程序,大家帮忙看看,问题出在了那里
#include "stm32f10x.h"
//自定义函数声明
void RCC_Configuration(void);
void GPIO_Configuration(void);
//void TIM_Configuration(void);
ErrorStatus HSEStartUpStatus;
/*
* 函数名:main
* 描述 : 主函数
* 输入 :无
* 输出 : 无
*/
int main(void)
{
//void TIM_Configuration(void); // 设置TIM
if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_6)==RESET)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //定义TIM_TimeBase初始化结构体TIM_TimeBaseStructure
TIM_OCInitTypeDef TIM_OCInitStructure; //定义TIM_OCInit初始化结构体TIM_OCInitStructure
RCC_Configuration(); // 设置系统时钟
GPIO_Configuration(); // 设置GPIO端口
// time=1;
/* PWM输出频率为1200HZ */
//计数重载值为60000,预分频值为(0+1=1),时钟分割0,向上计数模式
TIM_TimeBaseStructure.TIM_Period =0xFFFF;
TIM_TimeBaseStructure.TIM_Prescaler = 0x02;
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
//设置OC1通道,工作模式为PWM1输出模式,使能比较匹配输出极性,时钟分割0,向上计数模式
TIM_OCInitStructure.TIM_OCMode =TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
TIM_OCInitStructure.TIM_Pulse =0x8000;
TIM_OC1Init(TIM3, &TIM_OCInitStructure);
//使能预装载寄存器
TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM3, ENABLE);
TIM_Cmd(TIM3, ENABLE); //启动TIM计数
}
else
{
TIM_Cmd(TIM3, DISABLE);
}
}
/*
* 函数名:RCC_Configuration
* 描述 : 设置系统各部分时钟
* 输入 :无
* 输出 : 无
*/
void RCC_Configuration(void)
{
/* RCC system reset(for debug purpose) */
RCC_DeInit();
/* Enable HSE */
RCC_HSEConfig(RCC_HSE_ON);
/* Wait till HSE is ready */
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if(HSEStartUpStatus == SUCCESS)
{
/* Enable Prefetch Buffer */
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
/* Flash 2 wait state */
FLASH_SetLatency(FLASH_Latency_2);
/* HCLK = SYSCLK */
RCC_HCLKConfig(RCC_SYSCLK_Div1);
/* PCLK2 = HCLK */
RCC_PCLK2Config(RCC_HCLK_Div1);
/* PCLK1 = HCLK/2 */
RCC_PCLK1Config(RCC_HCLK_Div2);
/* PLLCLK = 8MHz * 9 = 72 MHz */
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
/* Enable PLL */
RCC_PLLCmd(ENABLE);
/* Wait till PLL is ready */
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
{
}
/* Select PLL as system clock source */
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
/* Wait till PLL is used as system clock source */
while(RCC_GetSYSCLKSource() != 0x08)
{
}
}
/* GPIOB clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
/* GPIOA clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
/* TIM2 clock enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
/* Enable AFIO clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
}
/*
* 函数名:GPIO_Configuration
* 描述 : 配置GPIO参数
* 输入 :无
* 输出 : 无
*/
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* GPIOA.0 Configuration:TIM2 Channel1 in Output */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//配置GPIOB.6为浮动输入///
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOB, &GPIO_InitStructure);
} |
|