历史上的今天
返回首页

历史上的今天

今天是:2025年07月19日(星期六)

2018年07月19日 | stm32的通用计数器用于编码器的脉冲计数

2018-07-19 来源:eefocus

这周做电脑鼠的编码器模块,整整的折腾了一周。
这过程真是让我们哭笑不得,我们打算用TIM3的CH3和CH4通道采集左电机的pwm来测速和测距,用TIM4的CH2和CH1来测右电机的。
写代码时,我们先做的是左电机的,整整闹到了礼拜五,才发现通用定时器的CH3和CH4通道不能用来做PWM输入,晕!!下面是我们的配置之一,拿出来与大家分享分享!
  我们用GPIO_B_7,TIMER4的二通道


 void MY_CONFIG(void)
{
   NVIC_InitTypeDef NVIC_InitStructure;  
   GPIO_InitTypeDef GPIO_InitStructure;
   TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
   /* TIM4 clock source enable */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
  /* Enable GPIOA, clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
 

GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7; 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; 
GPIO_Init(GPIOB, &GPIO_InitStructure);

//TIM4输出初始化 
TIM_DeInit(TIM4);  
TIM_TimeBaseStructure.TIM_Period = 100; //计数值=100-1 
TIM_TimeBaseStructure.TIM_Prescaler = 0; //预分频 
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //时钟分割 
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Down; //模式 
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //基本初始化

TIM_SetCounter(TIM4, 100); //设置 TIM4 计数器寄存器值  
 //设置 TIMx 自动重装载寄存器值 
 TIM_ARRPreloadConfig(TIM4, ENABLE);
TIM_SelectInputTrigger(TIM4, TIM_TS_TI2FP2); //若为通道1 ,则为TIM_TS_TI1FP1
//TIM_SelectInputTrigger(TIM2, TIM_TS_TI1F_ED); 
TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_External1); 
//TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Reset);

TIM_SetCompare2(TIM4, 100); //若用1通道。则为:TIM_SetComper1(TIM4,100);
TIM_Cmd(TIM4, ENABLE); //启动TIM4 
TIM_ClearFlag(TIM4, TIM_IT_CC2); //若用一通道,则此处和后面的TIM_IT_CC2都改为TIM_IT_CC1
TIM_ITConfig(TIM4, TIM_IT_CC2, ENABLE)
//中断配置

NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQChannel;; // 
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; //抢占优先级0 
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应优先级0 
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //允许中断 
NVIC_Init(&NVIC_InitStructure);    //写入设置 
}

void TIM4_IRQHandler(void) 
{

TIM_ClearFlag(TIM4, TIM_IT_CC2);


悲催了,还得重新画板子。不过关于stm32的通用定时器学到了不少,继续加油


推荐阅读

史海拾趣

Alps Alpine Co Ltd公司的发展小趣事

Alps Alpine Co., Ltd.是一家总部位于日本的跨国电子制造公司,专注于设计和制造汽车电子、消费电子和工业电子产品。以下是关于Alps Alpine公司发展的五个相关故事:

  1. 公司合并:Alps Electric Co., Ltd.和Alpine Electronics, Inc.于2019年进行了合并,正式成立了Alps Alpine Co., Ltd. 这一合并为两家公司带来了更强大的整合资源和技术实力,使得Alps Alpine能够在全球范围内提供更多样化的电子解决方案。

  2. 汽车电子领域的发展:Alps Alpine在汽车电子领域拥有丰富的经验和技术积累。公司致力于开发汽车内部电子系统,包括车载娱乐系统、导航系统、车载通信系统、驾驶辅助系统等。随着汽车智能化和互联网化的发展,Alps Alpine不断推出创新产品,满足汽车制造商和消费者对智能驾驶体验的需求。

  3. 消费电子产品的多样化:除了汽车电子,Alps Alpine还在消费电子领域拥有广泛的产品线。公司的产品涵盖了手机、平板电脑、摄像机、音响设备等多个终端设备,并不断推出新品,以满足消费者对功能性和设计性的需求。

  4. 工业电子市场的拓展:Alps Alpine在工业电子领域也取得了长足的发展。公司的产品被广泛应用于工业自动化、机器人技术、医疗设备、能源管理等领域,为各行各业提供高性能、可靠的电子解决方案。

  5. 技术创新与研发投入:作为一家技术驱动的企业,Alps Alpine不断加大对研发的投入,致力于技术创新和产品优化。公司拥有强大的研发团队和先进的研发设施,在各个领域持续推动技术进步,提升产品竞争力。

以上是关于Alps Alpine Co., Ltd.发展的五个相关故事,这些故事展示了公司在合并整合、汽车电子、消费电子、工业电子和技术创新方面的发展历程,以及其在电子行业中的重要地位和影响力。

Dynachip Corp公司的发展小趣事

Dynachip Corp深知品质对于电子产品的重要性,因此他们建立了严格的质量管理体系,从原材料采购到生产过程再到成品检测,每一个环节都严格把控。他们还引进了先进的生产设备和技术,确保产品的稳定性和可靠性。这种对品质的坚持使Dynachip Corp的产品在市场上获得了广泛认可,客户群逐渐扩大。

bb-smartworx公司的发展小趣事

Dynachip Corp深知品质对于电子产品的重要性,因此他们建立了严格的质量管理体系,从原材料采购到生产过程再到成品检测,每一个环节都严格把控。他们还引进了先进的生产设备和技术,确保产品的稳定性和可靠性。这种对品质的坚持使Dynachip Corp的产品在市场上获得了广泛认可,客户群逐渐扩大。

Elekon Industries公司的发展小趣事

Elekon始终将品质放在首位。公司建立了完善的质量管理体系,从原材料采购到生产、检测、包装等各个环节都进行严格的质量控制。此外,Elekon还引进了先进的生产设备和技术,确保产品的质量和性能达到国际先进水平。这些举措使得Elekon的产品在市场上享有很高的声誉和口碑。

Grand Halo Technology Co Ltd公司的发展小趣事

随着业务的不断发展,Elekon开始寻求更广阔的市场空间。公司制定了全球化战略,积极开拓国际市场。通过参加国际展会、建立海外销售网络等方式,Elekon成功将产品打入国际市场,并赢得了众多客户的青睐。同时,Elekon还与国际知名电子企业建立了合作关系,共同研发新产品、开拓新市场。

Digital View公司的发展小趣事

Digital View公司成立于1995年,当时正值电子显示技术快速发展的时期。公司创始人凭借对数字显示技术的深刻理解和前瞻性的市场洞察力,决定专注于平板数字显示市场连接解决方案的研发和生产。在创业初期,公司面临资金短缺、技术瓶颈等多重困难,但团队凭借坚韧不拔的精神,成功开发出多款具有竞争力的产品,逐渐在市场上获得认可。

问答坊 | AI 解惑

两种无线数字调制解调器的设计对比

作者:中国人民解放军94569部队 白欣 摘   要:本文介绍了分别基于CMX469A和MSM7512B设计实现的两种无线数字MODEM,说明了系统关键部分的硬件实现方法和软件设计,并对两种设计方案进行了对比分析。关键词:调制解调器;FSK;双工 & ...…

查看全部问答>

c陷阱与缺陷

书中收集了c语言编程的几乎所有漏洞与缺陷。 这本书再版多少次了,几乎没有改版,经典!!! [ 本帖最后由 richiefang 于 2009-11-25 08:55 编辑 ]…

查看全部问答>

SD卡数据的读取

我想用FPGA来读取SD卡内的数据,那位大虾有现成的FPGA程序,共享一下!…

查看全部问答>

关于NK烧到FLASH中运行的问题

问题是这样的,原来将NK.BIN烧到FLASH的首地址中 0x60000000 (FLASH的物理地址)可以正常启动镜像. 现在需要把NK往后一段,以保证不把原来烧在FLASH里EBOOT覆盖掉,比如0x60080000 现在我修改了CONFIG.BIB,下载后通过超级终端看到了确实是烧在了0x6008 ...…

查看全部问答>

支持DirectShow的usb摄像头的接口是什么标准啊(不需要安装驱动)

如题:这种usb设备需要怎样通讯可让windows 自动识别为usb图像设备…

查看全部问答>

rabbit2000嵌入式开发

请教各位大侠:   有用过rabbit2000的吗???求教如何编程串口为奇偶效验,数据位5-9…

查看全部问答>

求助:关于无法解析的外部符号的错误

大家好:     在我的程序里用了::TrackPopupMenu,程序编译通过了,但连接时又出现如下错误: error LNK2019: 无法解析的外部符号 TrackPopupMenu。     我在.cpp文件中已经#include ,TrackPopupMenu就在winuser.h里,为什 ...…

查看全部问答>

由于快递没到所以团购活动的maple开发板延误了

由于快递没到所以团购的maple开发板延误了预计明天会到…

查看全部问答>

仿真器的问题

我用的是usb仿真器,以前一直好好的,可是昨天拆了一次后,系统突然提示为无法识别的usb设备,因此也无法安装驱动,请问有人遇到这样的问题吗?…

查看全部问答>