想用TIM4当计数器使用,结果得不到正确的数据,请帮忙看看,谢谢。
#include <stm32f10x_lib.h>
#include "sys.h"
#include "usart.h"
#include "delay.h"
int main(void)
{
u16 b1;
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口初始化
//初始化PE0
RCC->APB2ENR|=1<<6; //使能PORTE时钟
GPIOE->CRL&=0XFFFFFFF0;//PE0 TIM4使用PE0输入
GPIOE->CRL|=0X00000008;//8为上下拉输入(PXODR=0下拉,PXODR=1上拉)
GPIOE->ODR|=1<<0;//PE0上拉
//初始化TIM4为外部时钟输入
RCC->APB1ENR|=1<<2;//TIM4时钟使能 bit0-5对应TIM2-7的时钟使能
TIM4->ARR=0XFFFF;
TIM4->SMCR=(3<<14); //BIT14=1启动外部输入 下降沿记数 不分频
TIM4->CR1|=1<<1;//禁止UEV更新事件
TIM4->CR1|=0x01; //使能定时器4
////初始化PD0 PD0做TIM4记数输入
RCC->APB2ENR|=1<<5; //使能PORTD时钟
GPIOD->CRL&=0XFFFFFFF0; //PD.0
GPIOD->CRL|=0X00000003;//PD0推挽输出时钟50MHZ
GPIOD->ODR|=1; //PD0输出高 pd0做TIM4记数输入
while(1)
{
delay_us(100);
  Dout(0)=!PDout(0);//翻转PD0 pd0做TIM4记数输入
b1++;
//当翻转0X3FF次后发送 TIM4的记数值 应该为0X3FF/2=1FF
if(b1==0x3ff)
{
putchar(TIM4->CNT>>8); //通过串口1输出高8位数据
putchar(TIM4->CNT); //通过串口1输出低8位数据
//结果接收到的数据是错误的
TIM4->CNT=0; //清除记数
b1=0;
}
}
}
|