微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > STM8 STVD TIM1 计数功能

STM8 STVD TIM1 计数功能

时间:10-02 整理:3721RD 点击:
笔记亲自测试通过。
/* MAIN.C file
*
* Copyright (c) 2002-2005 STMicroelectronics
*/
/* 程序实现功能 设置外部  TIM1 时钟源 计数功能,如果串口 在串口助手上看到计数值
*
**/
/*
*  TIM1 工作在定时功能模式时 定时器的时钟CK_PSC 由内部分频后提供
* 如果把时钟源改为外部当外部电平发生变化 时 TIM1_CNTR 中的值 就会变化
* 这样就实现了计数功能
*
*/

#include "stm8s105c4.h"
void gpio_init(void)
{
                /*
                * 这个可以不用IO 口 如果如果灯效果来显示也可以设置
                */
                PB_ODR = 0XFF;
                PB_DDR = 0XFF;
                PB_CR1 = 0XFF;
                PB_CR2 =0XFF;
                PC_DDR = 0X00;
                PC_CR1 = 0XFF;
               
               
               
}
//定时器1 初始化
void tim1_init(void)
{
                 //输入捕获频率设置 为 fsmapling = fmaster/32  n=8
                 TIM1_CCMR1 |= 0X00;  //滤波频率设置 或采样频率设置
                 //OCICE =1
                 // 一旦检测到 ETRF 输入高电平OC1REF = 0;
                 //OC1M[2:0] = 111
                 //pwm 模式2 向上计数 一旦TIM1_CNT <TIM1_CCR1 时通道1 为无效电平
                 //否则为有效电平
                 // 一旦TIM1_CNT>TIM1_CCR1 时 通道1 为有效电平 否则为无效电平
                 TIM1_CCER1 = 0X20;  //选择上升下降电平
                 //捕获发生在TI2F 的低电平或下降沿
                 TIM1_SMCR |= 0X07; //选择上升还是下降 作为触发
                 //外部时钟模式 1 选中的触发 TRGI  的上升沿驱动计数器
                 TIM1_SMCR |=0X60;  //选择输入端
                 //选择TI2  作为输入端
                 // 也就是 PC2
                 // ITM1_CH2  
}
void uart2_init(void)
{
               
}

void main()
{
                gpio_init(); //IO 口初始化
                tim1_init();  //定时器1 初始化
                TIM1_CR1 |= 0X11;
                //ARPE =0 TIM1_ARR 寄存器没有缓存 直接写入  =1 TIM1_ARR 寄存器由预装载缓冲器缓冲
                //CMS =00 边沿对齐模式 计数器依据方向位DIR 向上或向下计数  
                // = 01 中央对其模式1 计数器交替向上或向下计数 配置为输出的通道TIM1_CCMR 中CCIS =00 的输出比较中断标志位
                //只在计数器向下计数时 计数置1
                // = 10 中央对其模式2 计数器交替向上和向下计数,配置位输出通道TIM1_CCMRX 寄存器中 CCIS 输出比较中断标志位
                // 只在计数器向上计数时 被置1
                // 11 中央对齐模式3 计数器交替地向上和向下计数  配置为输出通道 的输出比较中断标志位 在计数器向上和向下计数时被
                //置 1
               
                //DIR
                //OPM
                //URS
                //UDIS =0 一旦下列事件发生 产生更新UEV 事件
                //计数器上溢出 或下溢出
                //软件更新
                //时钟触发模式控制器产生硬件复位
                //=1 不产生更新事件 影子寄存器 ARR PSC CCRX 保持它的值 如果设置UG 位
                //或时钟触发控制器发出一个硬件复位 则计数器和预分频器重新初始化
                //CEN  =0 禁止计数器  =1 使能计数器
               
          uart2_init();  //串口初始化
          while (1)
         {
                PB_ODR =~TIM1_CNTRL;         //把数到的数 在PB 口显示出来,实验是通过 PB 口接 8个led 灯来显示的。
         }
}

// 其中的串口我去掉了,加上串口可以在串口助手中看到 计数的增加
//现在 需要通过PB 口接 LED 灯来查看计数的增加
//可以改变计数方向
//可以改变捕获频率

就不能打包分享吗           

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top