|
Проблема с функцией задержки., STM32F107 |
|
|
|
Jun 27 2016, 09:05
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Какая то ну очень странная проблема. Я сделал функцию задержки так. Код 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
|
|
|
|
|
 |
Ответов
|
Jun 27 2016, 13:23
|
Местный
  
Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672

|
Цитата(Jenya7 @ Jun 27 2016, 05:38)  Я не хочу чтоб он все время тикал, будет генерироваться интерапт который не нужен (SysTick_Handler). А так открыл, отсчитал, закрыл. STM32F4xx Код #define DWT_CYCCNT *(volatile uint32_t *)0xE0001004 #define DWT_CONTROL *(volatile uint32_t *)0xE0001000 #define SCB_DEMCR *(volatile uint32_t *)0xE000EDFC #ifndef HCLK #define HCLK 168000000 #endif
#define dwt_ena() (SCB_DEMCR |= CoreDebug_DEMCR_TRCENA_Msk) #define dwt_dis() (SCB_DEMCR &= ~CoreDebug_DEMCR_TRCENA_Msk) #define dwt_rst() DWT_CYCCNT = 0 #define dwt_start() (DWT_CONTROL |= DWT_CTRL_CYCCNTENA_Msk) #define dwt_cnt() DWT_CYCCNT
void delay_1us (void) { uint32_t start, end; start = dwt_cnt(); end = start + HCLK/1000000; if (end < start) while (dwt_cnt() > start); while (end >= dwt_cnt()); }
void delay_1ms (void) { uint32_t start, end; start = dwt_cnt(); end = start + HCLK/1000; if (end < start) while (dwt_cnt() > start); while (end >= dwt_cnt()); Идея, надеюсь, понятна...
--------------------
|
|
|
|
Сообщений в этой теме
Jenya7 Проблема с функцией задержки. Jun 27 2016, 09:05  scifi Цитата(Jenya7 @ Jun 27 2016, 12:38) Я не ... Jun 27 2016, 11:09 KnightIgor Цитата(Jenya7 @ Jun 27 2016, 10:05) Какая... Jun 27 2016, 11:35 Jenya7 Цитата(KnightIgor @ Jun 27 2016, 16:35) У... Jun 27 2016, 12:01 Сергей Борщ Извиняюсь, что не про задержку:
QUOTE (Jenya7 ... Jun 27 2016, 12:45 Jenya7 Цитата(Сергей Борщ @ Jun 27 2016, 17:45) ... Jun 27 2016, 13:18  Сергей Борщ QUOTE (Jenya7 @ Jun 27 2016, 16:18) выход... Jun 27 2016, 13:23   Jenya7 Цитата(Сергей Борщ @ Jun 27 2016, 18:23) ... Jun 27 2016, 13:28    Сергей Борщ QUOTE (Jenya7 @ Jun 27 2016, 16:28) Серге... Jun 27 2016, 13:46     Jenya7 Цитата(Сергей Борщ @ Jun 27 2016, 18:46) ... Jun 27 2016, 13:54      Сергей Борщ QUOTE (Jenya7 @ Jun 27 2016, 16:54) После... Jun 27 2016, 16:13       Jenya7 Цитата(Сергей Борщ @ Jun 27 2016, 21:13) ... Jun 27 2016, 16:22        Сергей Борщ QUOTE (Jenya7 @ Jun 27 2016, 19:22) Нижни... Jun 27 2016, 16:48         Jenya7 Цитата(Сергей Борщ @ Jun 27 2016, 21:48) ... Jun 27 2016, 16:57      jcxz Цитата(Jenya7 @ Jun 27 2016, 19:54) Вообщ... Jun 28 2016, 03:47 jcxz Цитата(Jenya7 @ Jun 27 2016, 15:05) Какая... Jun 27 2016, 13:44 Jenya7 Переделал функции под вариант с OPEN DRAIN.
CODE#... Jun 28 2016, 05:34 Сергей Борщ QUOTE (Jenya7 @ Jun 28 2016, 08:34) но те... Jun 28 2016, 07:29  Jenya7 То есть нужно так?
Код PIN_OFF(GPIOx, PINx... Jun 28 2016, 07:44 Tarbal Цитата(Jenya7 @ Jun 27 2016, 13:05) Какая... Jun 29 2016, 18:13 Alechek Цитата(Tarbal @ Jun 29 2016, 23:13) Я бол... Jun 29 2016, 18:42  Tarbal Цитата(Alechek @ Jun 29 2016, 22:42) И чт... Jun 29 2016, 20:26 Jenya7 Цитата(Tarbal @ Jun 29 2016, 23:13) Я бол... Jun 30 2016, 08:05  Сергей Борщ QUOTE (Jenya7 @ Jun 30 2016, 11:05) Единс... Jun 30 2016, 08:48   KnightIgor Цитата(Сергей Борщ @ Jun 30 2016, 09:48) ... Jun 30 2016, 09:04   Jenya7 Цитата(Сергей Борщ @ Jun 30 2016, 13:48) ... Jun 30 2016, 09:30    jcxz Цитата(Jenya7 @ Jun 30 2016, 15:30) разгр... Jun 30 2016, 10:15     Tarbal Цитата(jcxz @ Jun 30 2016, 14:15) А чем у... Jun 30 2016, 12:47    Эдди Цитата(Jenya7 @ Jun 30 2016, 12:30) Интер... Jun 30 2016, 10:40 Эдди ТС, возьми нормальную реализацию 1-wire через тайм... Jun 30 2016, 09:14 Сергей Борщ QUOTE (Эдди @ Jun 30 2016, 12:14) ТС, воз... Jun 30 2016, 09:43 Alechek Ой, о чем спор? Ногодрыг или аппаратный 1-wire? ... Jun 30 2016, 11:21 Jenya7 Цитата(Alechek @ Jun 30 2016, 16:21) Ой, ... Jun 30 2016, 12:26  Alechek Цитата(Jenya7 @ Jun 30 2016, 17:26) Я вид... Jul 1 2016, 04:58
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|