stm8s207 调试hx711称重装置,输出结果一直为0
stm8s207 调试hx711称重装置,输出结果一直为0,大家帮助看一看哪里有错误;16M晶振不分频code hx711.c
void GPIO_Int(void)
{
GPIO_DeInit(GPIOB);
GPIO_DeInit(GPIOA);
GPIO_DeInit(GPIOE);
GPIO_Init(GPIOB, GPIO_PIN_2, GPIO_MODE_OUT_PP_LOW_SLOW);//led2
GPIO_Init(GPIOB, GPIO_PIN_3, GPIO_MODE_OUT_PP_LOW_SLOW);//led3
GPIO_Init(GPIOB, GPIO_PIN_7, GPIO_MODE_IN_PU_NO_IT);//k1
GPIO_Init(GPIOA, GPIO_PIN_6, GPIO_MODE_IN_PU_NO_IT);//k2
GPIO_Init(GPIOG, GPIO_PIN_0, GPIO_MODE_OUT_PP_LOW_FAST);////HX711_SCK
GPIO_Init(GPIOG, GPIO_PIN_1, GPIO_MODE_IN_FL_NO_IT);////DT上拉输入
GPIO_WriteLow(GPIOE, GPIO_PIN_3);
}
u32 HX711_Read(void) //增益128
{
unsigned long count;
unsigned char i;
GPIO_WriteLow(GPIOG, GPIO_PIN_0); //sck0
count=0;
while(GPIO_ReadInputPin(GPIOG, GPIO_PIN_1));
for(i=0;i<24;i++)
{
GPIO_WriteHigh(GPIOG, GPIO_PIN_0);
nop();
count=count<<1;
GPIO_WriteLow(GPIOG, GPIO_PIN_0);
if(GPIO_ReadInputPin(GPIOG, GPIO_PIN_1))
count++;
nop();
}
GPIO_WriteHigh(GPIOG, GPIO_PIN_0);
count=count^0x800000;//第25个脉冲下降沿来时,转换数据
nop();
GPIO_WriteLow(GPIOG, GPIO_PIN_0);
return(count);
}
//****************************************************
//获取毛皮重量
//****************************************************
void Get_Maopi(void)
{
Weight_Maopi = HX711_Read();
}
void Get_Weight(void)
{
{
Weight_Shiwu = HX711_Read();
Weight_Shiwu = Weight_Shiwu - Weight_Maopi; //获取净重
if(Weight_Shiwu >= 0)
{
Weight_Shiwu = (unsigned long)((float)Weight_Shiwu/GapValue); //计算实物的实际重量
}
else
{
Weight_Shiwu = 0;
}
}
main。c
void main(void)
{
CLK_DeInit();
/*判断时钟源,自动切换到HSE*/
if(CLK_GetSYSCLKSource()!=CLK_SOURCE_HSE)
{
/*使能自动切换,一直等待到切换成功*/
while(CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO,
CLK_SOURCE_HSE,
DISABLE,CLK_CURRENTCLOCKSTATE_ENABLE)
==ERROR);
}
//User_UART3_Init();
User_UART1_Init();
GPIO_Int();
Weight_Maopi = HX711_Read();
Weight_Maopi = HX711_Read();
Weight_Maopi = HX711_Read();
delays();
Weight_Maopi = HX711_Read();
/* Infinite loop */
while (1)
{
// Get_Weight();
nop();
nop();
// Weight_Shiwu = HX711_Read();
Get_Weight();
Weight_Shiwu = (unsigned long)((float)Weight_Shiwu/430);
printf("净重量 = %d g\r\n",Weight_Shiwu);
//printf("净重量 =g\r\n");
delays();
}
}
GPIO_Init(GPIOG, GPIO_PIN_1, GPIO_MODE_IN_FL_NO_IT);////DT上拉输入实际为浮空输入 净重量 = 0 g
净重量 = 0 g
净重量 = 0 g
净重量 = 0 g
净重量 = 0 g
净重量 = 0 g
净重量 = 0 g 66666666666666666666666666666666666666 如果外部没有上拉电阻,应改成:
GPIO_Init(GPIOG, GPIO_PIN_1, GPIO_MODE_IN_PU_NO_IT);
wenyangzeng 发表于 2018-4-29 07:32
如果外部没有上拉电阻,应改成:
GPIO_Init(GPIOG, GPIO_PIN_1, GPIO_MODE_IN_PU_NO_IT);
...
试过了结果一样 手册建议浮空输入 半夏微凉 发表于 2018-4-29 11:49
试过了结果一样 手册建议浮空输入
那你应该把器件的时序图贴上 wenyangzeng 发表于 2018-4-29 13:30
那你应该把器件的时序图贴上
解决了 找到原因程序没大问题,只是大打印输出时候打印输出无数据。程序是移植32的32的打印输出程序如下:
while(1)
{
Get_Weight();
printf("¾»ÖØÁ¿ = %d g\r\n",Weight_Shiwu); //´òÓ¡
delay_ms(1000);
}
}
我是直接复制过来的,因为自己的也printf重定向了,所以一直忽略这个问题。后来参照51的程序慢慢发现的
//Weight_Shiwu = 5000;
WeightShiwu = Weight_Shiwu%10000/1000 + 0x30;
WeightShiwu = Weight_Shiwu%1000/100 + 0x30;
WeightShiwu = Weight_Shiwu%100/10 + 0x30;
WeightShiwu = Weight_Shiwu%10 + 0x30;
WeightShiwu = 'g';
for(i=0;i<5;i++)
{
UART1_SendData8(WeightShiwu);
while(UART1_GetFlagStatus(UART1_FLAG_TXE )==RESET);
nop();
}
页:
[1]