OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8871|回复: 1

请高手指点,STM32F205ZG编码器,定义的变量unsigned int 是16位的下面程序void position(void)转成32位的。不懂!!

[复制链接]

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2013-4-17
在线时间
0 小时
发表于 2013-8-13 14:38:51 | 显示全部楼层 |阅读模式
先谢谢各位大侠了。。

#include "Encinput.h"

/* Struct Define ------------------------------------------------------------*/
NVIC_InitTypeDef NVIC_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
/*************************************
typedef unsigned int DWORD;
typedef unsigned short int WORD;
typedef unsigned char BYTE;
typedef signed int SDWORD;
typedef signed short int SWORD;
typedef signed char SBYTE;
**************************************/

BYTE FloorQuantity = 3;
DWORD floorhigh = 19600;    //
WORD Vanequarter = 163;    //
DWORD floorstate;               //

/* Variable Define -----------------------------------------------------------*/
BYTE F_EncodeDir;
DWORD GetCounter;
DWORD GetCounterNew;
DWORD GetCounterOld;
BYTE F_GetCounter;
DWORD Location = LocationBottom;
BYTE F_Location; //      typedef unsigned char BYTE;


void encoder(void)
{
TIM_ICInitTypeDef  TIMICInitStructure;
/* TIM4 clock enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
/* GPIOA clock enable */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource12, GPIO_AF_TIM4);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource13, GPIO_AF_TIM4);
NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

TIM_TimeBaseInitStructure.TIM_Prescaler = 0x0; //No precaling
TIM_TimeBaseInitStructure.TIM_Period = 65535;
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV4;
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM4 , &TIM_TimeBaseInitStructure);

F_EncodeDir = 1;
GPI12E_T3CON_T3UD(F_EncodeDir); //GPT12E_T3UD(p.posdir);/*ser incremental encoder direction*/


TIMICInitStructure.TIM_ICFilter = 6;
TIM_ICInit(TIM4 ,&TIMICInitStructure);

TIM_ClearFlag(TIM4 ,TIM_FLAG_Update);

TIM_SetCounter(TIM4 ,Location); /* time 4 count register */ //设置TIMx计数器寄存器值

TIM_Cmd(TIM4 ,ENABLE);
GetCounter = TIM_GetCounter(TIM4);                       //获得TIMx计数器的值
}

/*******************************************************************************
* Function Name : position
* Description   : output position signal
* Input         : None
* Output         : None
* Return         : None
*******************************************************************************/
void position(void)
{
/* Count encoder ----------------------------------------------------------*/
if(GetCounter != TIM_GetCounter(TIM4))
{
GetCounter = TIM_GetCounter(TIM4);
}
GetCounterNew = GetCounter; //读取当前位置   
GetCounterOld = Location & 0xFFFF;                        //???????
if(GetCounterNew > GetCounterOld)                             //???????
{
if(GetCounterNew - GetCounterOld > 0x8000)       //???????
{
Location -= 0x00010000;                            //???????
}
}
else                                                                         //???????
{
if(GetCounterOld - GetCounterNew > 0x8000)      //???????
{
Location += 0x00010000;                         //???????
}
}
Location &= 0xFFFF0000;                                          //???????
Location |= GetCounterNew;                                    //???????
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-13 16:38:56 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-15 05:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表