我想利用光电编码器测量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 跳转至页
回复
我要赚赏金打赏帖 |
|
|---|---|
| 【FreeRtos】FreeRtos + MPU模块的配置使用被打赏¥32元 | |
| 【分享开发笔记,赚取电动螺丝刀】墨水屏文本显示器被打赏¥25元 | |
| 【STEVAL-STWINKT1B】:结合STMcubeMX读取磁力计iis2mdc被打赏¥19元 | |
| 【STEVAL-STWINKT1B】:结合STMcubeMX读取LPS22HH气压、温度被打赏¥19元 | |
| 【STEVAL-STWINKT1B】:结合STMcubeMX读取STTS751温度被打赏¥17元 | |
| 【STEVAL-STWINKT1B】:结合STMcubeMX软件读取HTS221温湿度被打赏¥22元 | |
| M5PAPERESP32EINKDEVKIT评测|使用MicroPython开发M5Paper被打赏¥15元 | |
| OK1126B-S开发板下以导航按键控制云台/机械臂姿态调整被打赏¥29元 | |
| 【树莓派5】便携热成像仪被打赏¥36元 | |
| 【树莓派5】环境监测仪被打赏¥35元 | |
我要赚赏金
