我想利用光电编码器测量STM32小车速度,通过无线模块传给上位机。于是用定时器2的TIM2_ETR接收光电编码器输出,把该通道配置成编码器模式,然后读取TIM2计数值获得速度信号传给上位机。但是上位机以16进制模式接收时只显示00;用字符接收则不显示字符。。这是什么情况
共6条
1/1 1 跳转至页
以下是我的与光电编码器相关的部分代码:
//使能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);
上位机部分之前已经通信成功过了,基本可以排除通信部分的问题。刚学光电编码器几天,看了一些资料也没理解透原理。 这部分程序是否有错误,请指正
共6条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
【有奖活动】震撼来袭!这场直播将直击工程师的心灵! | |
“我想要一部加热台”活动,不花钱赢取开发好工具!活动开始了哦 | |
【有奖活动】伙伴们:您的“需求”解决了吗? | |
抽奖了,抽奖了,金升阳医疗电源 |
打赏帖 | |
---|---|
【换取手持数字示波器】+与同事对定时器输出相位可调PWM移相全桥控制分享被打赏50分 | |
【换取手持数字示波器】+LP-MSPM0L1306开发板试用体验+串口被打赏40分 | |
CC-RL编译器相关问题求助被打赏10分 | |
【换取手持数字示波器】+与同事对ESP-12开发调试经验分享被打赏50分 | |
【换取手持数字示波器】+同事tek示波器调试spi解析被打赏50分 | |
【换取手持数字示波器】+2.6寸墨水屏调试经验被打赏50分 | |
换取手持数字示波器+个人开关电源的设计经验被打赏50分 | |
【换取手持数字示波器】+【APT32F173测评】+URAT被打赏20分 | |
【换取手持数字示波器】CH32X035的定时器以及外部中断体验被打赏50分 | |
【换取手持数字示波器】CH32X035搭建开发环境(RISC-V)被打赏50分 |