使用tim2作为计数器,使用外部时钟源模式2, 配置在ETR下每1个上升沿计数一次的向上计数器,然后将计数器中的计数值放入GPIOB端口。
程序如下,调试发现无法实现,找不到问题,请原子哥、大神们指点,小弟十分感谢!
#include "stm32f10x_lib.h" //包含了所有的头文件
void RCC_Configuration(void);
void GPIO_Configuration(void);
void TIM_Configuration(void);
//主程序--------------------
int main(void)
{
u16 ReadValue;
RCC_Configuration(); //使能外设时钟
GPIO_Configuration(); //初始化GPIO管脚
TIM_Configuration() ; //用作计数器
while(1)
{
ReadValue=TIM2->CNT ;
GPIOB->ODR=ReadValue ;
}
}
//--------Tim2设置---------------------------
void TIM_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//开启定时器2时钟
TIM_DeInit(TIM2);
TIM_TimeBaseStructure.TIM_Period = 100;
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //设置时钟分割系数
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
//配置TIM2外部时钟模式2 外部触发预分频OFF 外部触发极性上升沿有效 外部触发滤波器值为0
TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_OFF ,TIM_ExtTRGPolarity_NonInverted, 0x0);
TIM_SetCounter(TIM2, 0);清0计数器
TIM_Cmd(TIM2,ENABLE);//使能TIM2
}
//----------GPIO设置--------------------------
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_DeInit(GPIOA); //初始化
GPIO_DeInit(GPIOB);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA, ENABLE); // 使能外设时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出
GPIO_Init(GPIOB,&GPIO_InitStructure);
//-------------设置时钟72mhz------------------------------
void RCC_Configuration(void)
{
RCC_DeInit(); //初始化
RCC_HSEConfig(RCC_HSE_ON); //时钟使能
while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET); //等待高速时钟就绪
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
FLASH_SetLatency(FLASH_Latency_2);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); ////使用锁相环输出72Mhz
RCC_PLLCmd(ENABLE); // Enable PLL
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); // Wait till PLL is ready
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource() != 0x08);
}
-------------------------------------------------------
调试发现无法实现,找不到问题,请原子哥、大神们指点,小弟十分感谢! |