新手入门
- 积分
- 15
- 金钱
- 15
- 注册时间
- 2016-1-3
- 在线时间
- 2 小时
|
2金钱
我按照网上找的一个程序,自己有修改,利用TIM4-CH2输出pwm脉冲,用TIM2-ETR对这个脉冲计数,在LCD屏上显示计数的值,但是显示一直为0,我都自己一边学习,一边修改,弄了一周了,实在做不出来,只能来请教各位大神了,求帮助!
代码如下:
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"
//EXTI_InitTypeDef EXTI_InitStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
void RCC_Configuration(void);
void GPIO_Configuration(void);
//void NVIC_Configuration(void);
void Delay(__IO uint32_t nCount);
void tim2_confi(void);
void tim4_confi(void);
u16 counter=0;
int main(void)
{
vu8 key=0;
// u8 i=0;
/* System Clocks Configuration */
RCC_Configuration();
/* NVIC configuration */
//NVIC_Configuration();
/* Configure the GPIO ports */
GPIO_Configuration();
/*Configure tim1*/
tim2_confi();
tim4_confi();
delay_init(); //Ñóê±oˉêy3õê¼»ˉ
uart_init(115200); //′®¿ú3õê¼»ˉÎa115200
LED_Init();
LCD_Init();
KEY_Init();
POINT_COLOR=RED;
LCD_Clear(BLACK);
LED0=0;
while (1)
{
Delay(10000); //1ms
TIM_Cmd(TIM2, ENABLE);
//TIM_Cmd(TIM4, ENABLE);
Delay(10000); //1ms
TIM_Cmd(TIM4, DISABLE);
TIM_Cmd(TIM2, DISABLE);
counter=TIM_GetCounter(TIM2);
key=KEY_Scan(0); //μÃμ½¼üÖμ
if(key==KEY0_PRES)
{LED0=!LED0;}
LCD_ShowString(30,40,100,24,24,"count:");
LCD_ShowNum(100,40,counter,10,24);
}
}
void Delay(__IO uint32_t nCount) //0.1us
{
for(; nCount != 0; nCount--);
}
void RCC_Configuration(void)
{
SystemInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //TIM2
}
/*
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; //TIM2ÖD¶Ï
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //ÏèÕ¼óÅÏè¼¶0¼¶
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //′óóÅÏè¼¶3¼¶
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQí¨μà±»ê1Äü
NVIC_Init(&NVIC_InitStructure); //3õê¼»ˉNVIC¼Ä′æÆ÷
}
*/
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //TIM2
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // PA.0
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO=50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //TIM4
//GPIO_PinRemapConfig (GPIO_Remap_TIM4 ,ENABLE ); //
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7 ; //PB.7
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void tim2_confi(void) //TIM2
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_DeInit( TIM2 ) ;
/* Time Base configuration */
TIM_TimeBaseStructure.TIM_Period = 0XFFFF; //
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
/* TIM2-ETR Configuration */
//TIM_ITRxExternalClockConfig(TIM2,TIM_TS_ETRF); //?????????????????????
//TIM_TIxExternalClockConfig(TIM2, TIM_TS_TI1FP1,TIM_ICPolarity_Rising, 0);//??TIMx???????
TIM_ETRClockMode2Config (TIM2,TIM_ExtTRGPSC_OFF,TIM_ExtTRGPolarity_NonInverted,0);
// TIM_ExtTRGPolarity_NonInverted;//TIMía2¿¼«DÔéÏéyÑØ¡¢¸ßμçÆ½óDD§
TIM_SetCounter( TIM2,0) ; //
TIM_Cmd(TIM2, DISABLE); //
}
void tim4_confi(void) //TIM4
{
// TIM4-CH2(PWM)
// ??=TIM1_CLK/(ARR+1)
TIM_TimeBaseInitTypeDef TIM_BaseInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
TIM_DeInit( TIM4 ) ;
TIM_BaseInitStructure.TIM_Period = 100; // ??T=0.1ms
TIM_BaseInitStructure.TIM_Prescaler = 72-1;
TIM_BaseInitStructure.TIM_ClockDivision = 0;
TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_BaseInitStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM4, &TIM_BaseInitStructure);
//??ARR??????(?????????????)
TIM_ARRPreloadConfig(TIM4, ENABLE);
TIM_ITConfig( TIM4,TIM_IT_Update | TIM_IT_Trigger, ENABLE ); //ê1ÄüÖ¸¶¨μÄTIM3ÖD¶Ï,ÔêDí¸üDÂÖD¶Ï
//ÖD¶ÏóÅÏè¼¶NVICéèÖÃ
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; //TIM3ÖD¶Ï
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //ÏèÕ¼óÅÏè¼¶0¼¶
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //′óóÅÏè¼¶3¼¶
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQí¨μà±»ê1Äü
NVIC_Init(&NVIC_InitStructure); //3õê¼»ˉNVIC¼Ä′æÆ÷
//TIM4_OC2????
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 = 50;
TIM_OC2Init(TIM4, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);
//TIM4??
TIM_Cmd(TIM4, DISABLE);
//TIM4_OC????PWM(????)
TIM_CtrlPWMOutputs(TIM4, ENABLE);
}
void TIM4_IRQHandler(void) //TIM3??
{
TIM_Cmd(TIM2, DISABLE);
if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET) //?????TIM??????:TIM ???
{
TIM_ClearITPendingBit(TIM4, TIM_IT_Update ); //??TIMx???????:TIM ???
}
}
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
{
while (1)
{
}
}
#endif
|
-
芯片引脚图
|