这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » STM32+光电编码器的问题

共6条 1/1 1 跳转至

STM32+光电编码器的问题

菜鸟
2014-08-23 16:10:42     打赏

我想利用光电编码器测量STM32小车速度,通过无线模块传给上位机。于是用定时器2的TIM2_ETR接收光电编码器输出,把该通道配置成编码器模式,然后读取TIM2计数值获得速度信号传给上位机。但是上位机以16进制模式接收时只显示00;用字符接收则不显示字符。。这是什么情况




关键词: STM32+     光电编码器    

院士
2014-08-23 22:19:33     打赏
2楼
程序错误或者硬件连接错误

菜鸟
2014-08-24 16:27:37     打赏
3楼
以下是我的与光电编码器相关的部分代码:
//使能PA0作为接收光电编码器输出的信号
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//配置TIM2定时器为编码器模式
void TIM2_Init()
{	 
 TIM_TimeBaseInitTypeDef		TIM2_TimeBaseStructure;
 TIM2_TimeBaseStructure.TIM_Period=0xFFFF;
 TIM2_TimeBaseStructure.TIM_Prescaler=0x00;
 TIM2_TimeBaseStructure.TIM_ClockDivision=0;
 TIM2_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
 
 TIM_ETRClockMode2Config(TIM2,TIM_ExtTRGPSC_DIV2,TIM_ExtTRGPolarity_NonInverted,0x0);
 TIM_SetCounter(TIM2, 0);
 TIM_TimeBaseInit(TIM2,&TIM2_TimeBaseStructure);
 TIM_ClearFlag(TIM2,TIM_FLAG_Update);
 TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
 TIM_Cmd(TIM2,ENABLE);

}
//获取速度值
unsigned int Get_Speed(void) 
{
   unsigned int speed=0;  
   speed=TIM_GetCounter(TIM2);       //脉冲值	    
   TIM_SetCounter(TIM2, 0);	//清除计数器TIM2的值   
   return speed; 
}
//发送给上位机的相关语句
unsigned int speed;
speed=Get_Speed();
USART3_Send(speed);

上位机部分之前已经通信成功过了,基本可以排除通信部分的问题。刚学光电编码器几天,看了一些资料也没理解透原理。 这部分程序是否有错误,请指正

	


院士
2014-08-25 07:35:05     打赏
4楼

这个东西没有那么难吧!

楼主 看一下官方的示例,印象中我写过类似的代码,我晚上回来给你找一下。


菜鸟
2014-08-25 10:33:56     打赏
5楼
刚学STM32没多久,实在是新手得不能再新手了!请多加指点 

高工
2014-08-31 15:48:26     打赏
6楼

USART3_Send(speed);  

不知道你的串口发送程序怎么写的,STM32串口一次只能发送一个字节数据,查看一下你的发送函数是不是数据超字节范围了呢


共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]