中级会员
 
- 积分
- 374
- 金钱
- 374
- 注册时间
- 2016-6-8
- 在线时间
- 79 小时
|
1金钱
[mw_shl_code=c,true]#define RESULT1 "SDP600检测到压差数据:"
#define RESULT2 "SDP600检测压差数据出错"
#define SDP600_UNIT "Pa"
void main()
{
etError error;
signed short difPressure; //这里的int是32位的
SystemConfig();
DelayConfig();
SDP_Init(0x40); //I2C地址默认0x40
while(1)
{
error = SDP600_ReadDifferentialPressure(&difPressure);
if(error == NO_ERROR)
{
signed char buffer[6];
RS485_Read(&com,RESULT1,sizeof(RESULT1)-1);
sprintf(buffer,"%d",difPressure); //数据修正问题
RS485_Read(&com,SDP600_UNIT,2); //问题1:这里能输出单位
RS485_Read(&com,&buffer[0],6); //最长情况-32700,6位
RS485_Read(&com,SDP600_UNIT,2); //问题1:这里不能输出单位
Delay_us(1000000);
//Delay_ms(1000); //问题2:使用ms级别的delay程序会死掉
}
else
{
RS485_Read(&com,RESULT2,sizeof(RESULT2)-1);
Delay_us(1000000);
//Delay_ms(1000);
}
}[/mw_shl_code]
Dleay文件
[mw_shl_code=c,true]/*不使用中断产生延时*/
#include "systick.h"
#include "stm32f10x.h"
static unsigned int factor_us = 0;
static unsigned int factor_ms = 0;
void DelayConfig()
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); // 1MHz
factor_us = SystemCoreClock/1000000; // 延时1us
factor_ms = 1000 * factor_us;
}
void Delay_us(unsigned int time)
{
SysTick->LOAD = time * factor_us - 1;
SysTick->VAL = 0;
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; // 开启systick
while((SysTick->CTRL & 0x01) && !(SysTick->CTRL & (1<<16))); // 使能SysTick并且还没计数到0
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; // 关闭systick
SysTick->VAL = 0;
}
void Delay_ms(unsigned int time)
{
SysTick->LOAD = time * factor_ms - 1;
SysTick->VAL = 0;
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; // 开启systick
while((SysTick->CTRL & 0x01) && !(SysTick->CTRL & (1<<16))); // 使能SysTick并且还没计数到0
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; // 关闭systick
SysTick->VAL = 0;
}[/mw_shl_code]
我串口那个在输出数字之后就不能输出单位了,如果把单位放在前面输出,又是可以的。
还有我同样的用systick进行延时,为什么使用us级别的那个我程序运行的时候不会卡住,
但是使用ms级别之后中途会卡住。
指教大家
|
|