Какая то ну очень странная проблема.
Я сделал функцию задержки так.
Код
void Delay_us(uint32_t us)
{
uint32_t ticks = 72 * us;
SysTick->LOAD = ticks;
SysTick->CTRL |= 0x01; //enable
while (!(SysTick->CTRL&SysTick_CTRL_COUNTFLAG_Msk));
SysTick->CTRL &= ~0x01; //disable
}
Проверяю
Код
PIN_OUT_PP(One_Wire_Pin);
while (1)
{
PIN_ON(One_Wire_Pin);
Delay_us(500);
PIN_OFF(One_Wire_Pin);
Delay_us(500);
}
Вижу хороший сигнал 500 микросек. Никаких проблем.
А вот в этой функции
Код
unsigned int One_Wire_Reset(GPIO_TypeDef * GPIOx, uint16_t PINx)
{
unsigned int tmp;
PIN_IN(GPIOx, PINx);
if ((PIN_SYG(GPIOx, PINx))==0) return One_Wire_Bus_Low_Error;
PIN_OUT_PP(GPIOx, PINx);
PIN_OFF(GPIOx, PINx);
Delay_us(480);
PIN_ON(GPIOx, PINx);
PIN_IN(GPIOx, PINx);
Delay_us(60);
if ((PIN_SYG(GPIOx, PINx))==0) tmp=One_Wire_Success;
else tmp=One_Wire_Error_No_Echo;
Delay_us(Time_After_Reset);
return tmp;
}
я вижу сигнал идет вниз на 350 микро (вместо 480). Кручу и так и этак, ума не приложу в чем проблема
Сообщение отредактировал Jenya7 - Jun 27 2016, 09:06