stm8s103f3外部时钟模式1计数器

2019-07-19 21:03发布

各位仁兄,我最近在调stm8s103f3碰到一个问题,我想用外部时钟模式一来实现外部时钟的计数,我用的的TI1(TIM1_CH1)端口,一下是我配置的代码,搞了我久久,它 就是不计数,愿各位高手多多相助。

/* Includes ------------------------------------------------------------------*/
#include "stm8s.h"
//#include<iostm8s103f3.h>
#include "sysclock.h"
#include "led.h"
#include "stm8s_uart1.h"
#include "uart1.h"
#include "stm8s_tim1.h"

unsigned int Time1Cnt;
/* Private defines -----------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/

/*******************************************************************************
**函数名称:void delay(unsigned int ms)     
**功能描述:大概延时
**入口参数:unsigned int ms   输入大概延时数值
**输出:无
*******************************************************************************/
void delayms(unsigned int ms)
{
  unsigned int x , y;
  for(x = ms; x > 0; x--)           /*  通过一定周期循环进行延时*/
    for(y = 327 ; y > 0 ; y--);    //内部时钟 2M
}

/*************************************
Tim1_CNT_Init
**************************************/
void Tim1_CNT_Init()
{
  GPIO_Init(GPIOC, GPIO_PIN_6, GPIO_MODE_IN_FL_NO_IT);      //管脚邋TI1配置
CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER1, ENABLE);  //打开timer1  时钟

  TIM1->CCMR1 |= 0x02 ;        //CC1配置为输入,映射在TI
  TIM1->CCMR1 &= 0x0f;         //不使用滤波器
  //TIM1->CR2     |=0x80;      //管脚异或后连到邋TI1
// TIM1->CCER1 &= 0xfd;         //选择上升沿触发
  TIM1->CCER1 |= 0x02;         //选择上升沿触发
  TIM1->SMCR   |=0x07;         //选择外部时钟模式1
  TIM1->SMCR   |=0x50;         // 滤波后接到TIFP1
  TIM1->CR1   |= 0x01;         //启动定时器
// TIM1->IER   |= 0x40;         //使能触发中断
  TIM1->ARRH = 0x04;
  TIM1->ARRL = 0x45;
  TIM1->CNTRH = 0x00;
  TIM1->CNTRL = 0x00;
}

int main(void)
{  
  
  /* 设置外部24M晶振为系统时钟 */
  //SystemClock_Init(HSE_Clock);
  CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV8);  //内部时钟为8分频 = 2Mhz
  asm("sim");  //关全局中断
// LED_Init();                               //调用LED初始化函数
  Uart1_Init();
  Tim1_CNT_Init();
  asm("rim");  // 开全局中断
  enableInterrupts();        /* 开启总中断 */

        while (1)
        {
         // LED_ShowOneToOne();        /* 流水灯 */        
          delayms(500);
          Time1Cnt = TIM1_GetCounter();
          UART1_SendData8(Time1Cnt);        
          /* 等待接收中断 */
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。