Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
now100
1 / 1 / 0
Регистрация: 12.10.2016
Сообщений: 24
1

STMF103C8T6 и HC-SR04. Вывод данных. Нужен код

12.10.2016, 17:54. Просмотров 1548. Ответов 10
Метки нет (Все метки)

Здравствуйте.

Поделитесь плиз кодом который выводит данные с HC-SR04 хоть на пищалку, хоть на светодиоды.

Только изучаю программирование МК и как-то туго с готовыми решениями на которых можно тренироваться.


P.S. Пока только в качестве тренировки написал вкл-выкл светодиода на PC13 двумя кнопками )
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2016, 17:54
Ответы с готовыми решениями:

HC-SR04 ультра звуковой датчик .вывод показаний с задержкой
Купил ультра звуковой датчик по эксперементировать с ним,подключил дисплей на дисплей выводятся...

ЕСТЬ КОД НУЖЕН ВВОД И ВЫВОД В ФАЙЛ СДЕЛАТЬ
заполнить массив змейкой начиная с 1 элемента пример 1 2 3 4 8 7 6 5 9 10 11 12...

Нужен код обновления данных
При нажатии на кнопку нужно изменить данные у выбранной записи в поле БД SQL. Код нужно написать в...

Нужен программный код.«Обработка строковых данных».
Дан текст из цифр и строчных латинских букв, за которым следует точка. Определите, каких букв —...

Мой код импорта данных в БД. Нужен совет
Всем привет. Скидываю код. Здесь идет загрузка файла на сервер, а затем импорт данных из него и...

10
Витальич
1274 / 1184 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
12.10.2016, 18:01 2
Цитата Сообщение от now100 Посмотреть сообщение
Пока только в качестве тренировки написал вкл-выкл светодиода на PC13 двумя кнопками
а показать? Да и написать название платы, если плата своя опубликовать схему.
0
now100
1 / 1 / 0
Регистрация: 12.10.2016
Сообщений: 24
12.10.2016, 18:05  [ТС] 3
Делал на основе примера взятого на http://www.avislab.com/blog/stm32-gpio/
У меня такой же контроллер как на фото в ссылке.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
 
int main(void)
{
 
  GPIO_InitTypeDef  GPIO_InitStructure;
 
  /* Initialize LED which connected to PC13 */
  // Enable PORTC Clock
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  /* Configure the GPIO_LED pin */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
 
  GPIO_SetBits(GPIOC, GPIO_Pin_13); // Set C13 to High level ("1")
  //GPIO_ResetBits(GPIOC, GPIO_Pin_13); // Set C13 to Low level ("0")
 
  /* Initialize Button input PB0 */
  // Enable PORTB Clock
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  /* Configure the GPIO_BUTTON pin */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
 
  /* Initialize Button input PB1 */
  // Enable PORTB Clock
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  /* Configure the GPIO_BUTTON pin */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
 
  while (1) {
 
    if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) == 0) {GPIO_ResetBits(GPIOC, GPIO_Pin_13);}
    if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0) {GPIO_SetBits(GPIOC, GPIO_Pin_13);}
  }
}
0
Витальич
1274 / 1184 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
12.10.2016, 18:24 4
Из документации мы читаем:
Принцип работы датчика можно условно разделить на 4 этапа:
1. Подаем импульс продолжительностью 10 мкс, на вывод Trig.
2. Внутри дальномера входной импульс преобразуется в 8 импульсов частотой 40 КГц и посылается вперед через "T глазик"
3. Дойдя до препятствия, посланные импульсы отражаются и принимаются "R глазиком". Получаем выходной сигнал на выводе Echo.
4. Непосредственно на стороне контроллера переводим полученный сигнал в расстояние по формуле:
ширина импульса (мкс) / 58= дистанция (см)
ширина импульса (мкс) / 148= дистанция (дюйм)
Значит нам понадобятся два таймера один для формирования импульса, второй для подсчета длительности импульса. Оба режима таймеров в STM32 можно использовать как программно аппаратные, то есть первый таймер непосредственно может управлять "ножкой" МК, второй таймер используем в режиме захвата. Читаем про таймеры, что непонятно спрашиваем.
P.S. Код за Вас в этом разделе писать ни кто не будет, а вот помочь очень даже могут.
P.P.S. Кстати Ваш код мигать не будет, верней будет, но никто это не увидит, ибо не совершенны Вы смертные
0
now100
1 / 1 / 0
Регистрация: 12.10.2016
Сообщений: 24
13.10.2016, 00:35  [ТС] 5
"P.P.S. Кстати Ваш код мигать не будет, верней будет, но никто это не увидит, ибо не совершенны Вы смертные "
про мигать я не говорил. код врубает и вырубает светодиод в зависимости от нажатой кнопки. выложить видео ? )
0
Витальич
13.10.2016, 00:53
  #6

Не по теме:

Извиняюсь, ошибался да будет на кнопку реагировать :)
Пойду застрелюсь

0
now100
1 / 1 / 0
Регистрация: 12.10.2016
Сообщений: 24
13.10.2016, 16:53  [ТС] 7
Изучаю работу с таймерами.
Объясните плиз, за счет чего вызывается функция TIM4_IRQHandler в которой происходит вкл-выкл светодиода ?

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_tim.h"
#include "misc.h"
 
void SetSysClockToHSE(void)
{
    ErrorStatus HSEStartUpStatus;
    /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration -----------------------------*/
    /* RCC system reset(for debug purpose) */
    RCC_DeInit();
 
    /* Enable HSE */
    RCC_HSEConfig( RCC_HSE_ON);
 
    /* Wait till HSE is ready */
    HSEStartUpStatus = RCC_WaitForHSEStartUp();
 
    if (HSEStartUpStatus == SUCCESS)
    {
        /* HCLK = SYSCLK */
        RCC_HCLKConfig( RCC_SYSCLK_Div1);
 
        /* PCLK2 = HCLK */
        RCC_PCLK2Config( RCC_HCLK_Div1);
 
        /* PCLK1 = HCLK */
        RCC_PCLK1Config(RCC_HCLK_Div1);
 
        /* Select HSE as system clock source */
        RCC_SYSCLKConfig( RCC_SYSCLKSource_HSE);
 
        /* Wait till PLL is used as system clock source */
        while (RCC_GetSYSCLKSource() != 0x04)
        {
        }
    }
    else
    { /* If HSE fails to start-up, the application will have wrong clock configuration.
     User can add here some code to deal with this error */
 
        /* Go to infinite loop */
        while (1)
        {
        }
    }
}
 
void TIM4_IRQHandler(void)
{
        if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)
        {
            // Обязательно сбрасываем флаг. Если этого не сделать, после обработки прерывания снова попадем сюда
            TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
            GPIOC->ODR ^= GPIO_Pin_13;
        }
}
 
int main(void)
{
    SetSysClockToHSE();
 
    /* Initialize LED which connected to PC13 */
    GPIO_InitTypeDef  GPIO_InitStructure;
    // Enable PORTC Clock
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    /* Configure the GPIO_LED pin */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
 
    GPIO_ResetBits(GPIOC, GPIO_Pin_13); // Set C13 to Low level ("0")
 
    // TIMER4
    TIM_TimeBaseInitTypeDef TIMER_InitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;
 
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); // Вмикаємо тактування таймера TIM4
 
    TIM_TimeBaseStructInit(&TIMER_InitStructure);
    TIMER_InitStructure.TIM_CounterMode = TIM_CounterMode_Up; // Режим счета
    TIMER_InitStructure.TIM_Prescaler = 8000; // Делитель частоты для таймера
    // Нужно еще учесть как настроены делители RCC_HCLKConfig( RCC_SYSCLK_Div1); RCC_PCLK1Config(RCC_HCLK_Div1);
    // В нашем случае оба  = RCC_SYSCLK_Div1, т.е. до делителя таймера доходит частота внешнего кварца (8МГц)
    TIMER_InitStructure.TIM_Period = 500; // Период, через который выполняется прерывание по переполнению  // F=8000000/8000/500 = 2 рази/сек.
    TIM_TimeBaseInit(TIM4, &TIMER_InitStructure);
    TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE); // Включаем прерывание по переполнению таймера
    TIM_Cmd(TIM4, ENABLE);// Включаемо таймер
 
    /* NVIC Configuration */
    /* Enable the TIM4_IRQn Interrupt */
    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);
 
    while(1)
    {
        
    }
}
0
Витальич
1274 / 1184 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
13.10.2016, 17:04 8
Цитата Сообщение от now100 Посмотреть сообщение
за счет чего вызывается функция TIM4_IRQHandler
Это прерывание таймера, условие прерывания (переполнение таймера, сравнение итд) Вы задаёте при настройке таймера
Цитата Сообщение от now100 Посмотреть сообщение
TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE); // Включаем прерывание по переполнению таймера
, далее Вы настраиваете контроллер прерываний, функции начинающиеся с NVIC_
0
_SayHello
616 / 363 / 114
Регистрация: 30.07.2015
Сообщений: 1,281
14.10.2016, 01:18 9
now100, так на будущее
C++
1
TIMER_InitStructure.TIM_Prescaler = 8000;
Если вы хотите чтобы делитель был 8000 то следует писать
C++
1
TIMER_InitStructure.TIM_Prescaler = 8000-1;
Для моргания светодиодом значения не имеет, но как я понял Вы в итоге хотите отмерять временной интервал точно, тут можно на грабли наступить)
0
now100
1 / 1 / 0
Регистрация: 12.10.2016
Сообщений: 24
17.10.2016, 16:10  [ТС] 10
Взял для теста код с http://www.avislab.com/blog/stm32-tim-capture/
В терминале постоянно число 20.
Вывожу на терминал значение Sonar вместо значения sonar_get() - в терминале :
STMF103C8T6 и HC-SR04. Вывод данных. Нужен код


Значения не зависят от расстояния между датчиком и препятствием.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_usart.h"
#include "stm32f10x_exti.h"
#include "stm32f10x_tim.h"
#include "stdio.h"
#include "misc.h"
 
volatile uint8_t FLAG_ECHO = 0;
volatile uint16_t SonarValue;
 
void SetSysClockTo72(void)
{
    ErrorStatus HSEStartUpStatus;
    /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration -----------------------------*/
    /* RCC system reset(for debug purpose) */
    RCC_DeInit();
 
    /* Enable HSE */
    RCC_HSEConfig( RCC_HSE_ON);
 
    /* Wait till HSE is ready */
    HSEStartUpStatus = RCC_WaitForHSEStartUp();
 
    if (HSEStartUpStatus == SUCCESS)
    {
        /* Enable Prefetch Buffer */
        //FLASH_PrefetchBufferCmd( FLASH_PrefetchBuffer_Enable);
 
        /* Flash 2 wait state */
        //FLASH_SetLatency( FLASH_Latency_2);
 
        /* HCLK = SYSCLK */
        RCC_HCLKConfig( RCC_SYSCLK_Div1);
 
        /* PCLK2 = HCLK */
        RCC_PCLK2Config( RCC_HCLK_Div1);
 
        /* PCLK1 = HCLK/2 */
        RCC_PCLK1Config( RCC_HCLK_Div2);
 
        /* PLLCLK = 8MHz * 9 = 72 MHz */
        RCC_PLLConfig(0x00010000, RCC_PLLMul_9);
 
        /* Enable PLL */
        RCC_PLLCmd( ENABLE);
 
        /* Wait till PLL is ready */
        while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
        {
        }
 
        /* Select PLL as system clock source */
        RCC_SYSCLKConfig( RCC_SYSCLKSource_PLLCLK);
 
        /* Wait till PLL is used as system clock source */
        while (RCC_GetSYSCLKSource() != 0x08)
        {
        }
    }
    else
    { /* If HSE fails to start-up, the application will have wrong clock configuration.
     User can add here some code to deal with this error */
 
        /* Go to infinite loop */
        while (1)
        {
        }
    }
}
 
void sonar_init() {
    GPIO_InitTypeDef gpio_cfg;
    GPIO_StructInit(&gpio_cfg);
 
    /* Timer TIM3 enable clock */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
 
    /* Timer TIM3 settings */
    TIM_TimeBaseInitTypeDef timer_base;
    TIM_TimeBaseStructInit(&timer_base);
    timer_base.TIM_CounterMode = TIM_CounterMode_Up;
    timer_base.TIM_Prescaler = 72;
    TIM_TimeBaseInit(TIM3, &timer_base);
    TIM_Cmd(TIM3, ENABLE);
 
    //Trigger Pin
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    gpio_cfg.GPIO_Mode = GPIO_Mode_Out_PP;
    gpio_cfg.GPIO_Pin = GPIO_Pin_15;
    GPIO_Init(GPIOB, &gpio_cfg);
 
    //EXTI
 
    /* Set variables used */
    GPIO_InitTypeDef GPIO_InitStruct;
    EXTI_InitTypeDef EXTI_InitStruct;
    NVIC_InitTypeDef NVIC_InitStruct;
 
    /* Enable clock for AFIO */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
 
    /* Set pin as input */
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init(GPIOB, &GPIO_InitStruct);
 
    /* Add IRQ vector to NVIC */
    /* PB0 is connected to EXTI_Line0, which has EXTI0_IRQn vector */
    NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn;
    /* Set priority */
    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0x00;
    /* Set sub priority */
    NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0x00;
    /* Enable interrupt */
    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
    /* Add to NVIC */
    NVIC_Init(&NVIC_InitStruct);
 
    /* Tell system that you will use PB0 for EXTI_Line0 */
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0);
 
    /* PD0 is connected to EXTI_Line0 */
    EXTI_InitStruct.EXTI_Line = EXTI_Line0;
    /* Enable interrupt */
    EXTI_InitStruct.EXTI_LineCmd = ENABLE;
    /* Interrupt mode */
    EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
    /* Triggers on rising and falling edge */
    EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
    /* Add to EXTI */
    EXTI_Init(&EXTI_InitStruct);
}
 
void EXTI0_IRQHandler(void) {
    /* Make sure that interrupt flag is set */
    if (EXTI_GetITStatus(EXTI_Line0) != RESET) {
        if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) != 0) {
            // Rising
            TIM_SetCounter(TIM3, 0);
        }
        if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) == 0) {
            // Falling
            SonarValue = TIM_GetCounter(TIM3);
        }
 
        /* Clear interrupt flag */
        EXTI_ClearITPendingBit(EXTI_Line0);
    }
}
 
void sonar_start() {
    int i;
 
    GPIO_SetBits(GPIOB, GPIO_Pin_15);
    //Delay 0x72000
    for(i=0;i<0x7200;i++);
    GPIO_ResetBits(GPIOB, GPIO_Pin_15);
}
 
unsigned int sonar_get() {
    unsigned long Sonar;
    // 354000 - Sound speed (mm/sec)
    // 72000000 - F_CPU
    // 16 - Timer Prescaler
    // Result = mm
    Sonar = (354/2) * (unsigned long)SonarValue / (72000 / 72);
    if (Sonar > 4000) Sonar = 4000;
    if (Sonar < 20) Sonar = 20;
 
    return (unsigned int)Sonar;
}
 
 
void usart_init(void)
{
    /* Enable USORT1 and GPIOA clock */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USORT1 | RCC_APB2Periph_GPIOA, ENABLE);
 
    /* Configure the GPIOs */
    GPIO_InitTypeDef GPIO_InitStructure;
 
    /* Configure USORT1 Tx (PA.09) as alternate function push-pull */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
 
    /* Configure USORT1 Rx (PA.10) as input floating */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
 
    /* Configure the USORT1 */
    USORT_InitTypeDef USORT_InitStructure;
 
    /* USORT1 configuration ------------------------------------------------------*/
    /* USORT1 configured as follow:
              - BaudRate = 115200 baud
              - Word Length = 8 Bits
              - One Stop Bit
              - No parity
              - Hardware flow control disabled (RTS and CTS signals)
              - Receive and transmit enabled
              - USORT Clock disabled
              - USORT CPOL: Clock is active low
              - USORT CPHA: Data is captured on the middle
              - USORT LastBit: The clock pulse of the last data bit is not output to
                               the SCLK pin
     */
    USORT_InitStructure.USORT_BaudRate = 115200;
    USORT_InitStructure.USORT_WordLength = USORT_WordLength_8b;
    USORT_InitStructure.USORT_StopBits = USORT_StopBits_1;
    USORT_InitStructure.USORT_Parity = USORT_Parity_No;
    USORT_InitStructure.USORT_HardwareFlowControl = USORT_HardwareFlowControl_None;
    USORT_InitStructure.USORT_Mode = USORT_Mode_Rx | USORT_Mode_Tx;
 
    USORT_Init(USORT1, &USORT_InitStructure);
 
    /* Enable USORT1 */
    USORT_Cmd(USORT1, ENABLE);
}
 
void USORTSend(char *pucBuffer)
{
    while (*pucBuffer)
    {
        USORT_SendData(USORT1, *pucBuffer++);
        while(USORT_GetFlagStatus(USORT1, USORT_FLAG_TC) == RESET)
        {
        }
    }
}
 
void TIM4_IRQHandler(void)
{
        if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)
        {
            sonar_start();
            FLAG_ECHO = 1;
            TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
        }
}
 
int main(void)
{
    char buffer[80] = {'\0'};
 
    SetSysClockTo72();
 
    // TIMER4 Двічи за секунду викликає sonar_start(); і встановлює FLAG_ECHO = 1;
    TIM_TimeBaseInitTypeDef TIMER_InitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
    TIM_TimeBaseStructInit(&TIMER_InitStructure);
    TIMER_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIMER_InitStructure.TIM_Prescaler = 7200;
    TIMER_InitStructure.TIM_Period = 5000;
    TIM_TimeBaseInit(TIM4, &TIMER_InitStructure);
    TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);
    TIM_Cmd(TIM4, ENABLE);
 
    /* NVIC Configuration */
    /* Enable the TIM4_IRQn Interrupt */
    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);
 
    usart_init();
    sonar_init();
 
    while(1)
    {
        if (FLAG_ECHO == 1) {
            sprintf(buffer, "%d\r\n", sonar_get());
            USORTSend(buffer);
 
            FLAG_ECHO = 0;
        }
    }
}
0
now100
1 / 1 / 0
Регистрация: 12.10.2016
Сообщений: 24
17.10.2016, 17:02  [ТС] 11
!!!!!!!!!!!!!!!! СТОП !!!!!!!!!!!!!!!!!!!!!!!
Пока отбой, неправильно запитал.
Сейчас отпишусь.

Добавлено через 29 минут
Работает.

Добавлено через 12 минут
из 128 значений среднее 2121см, минимальное 2111см, максимальное 2144
1
17.10.2016, 17:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2016, 17:02

Нужен код для передачи данных из TextBox на почту или ICQ
подскажите код для передачи данных из TextBox1 на почту или аську или сниффер в крайнем случае...

Добавить вывод данных в код программы
Я в asm'е дуб-дубом потому прошу помощи. Вот что есть :...

Покритикуйте код: чтение файла и вывод данных в несколько колонок
Кто готов наставить новичка на путь истинный, любит Хаскель и кому нечем заняться, велком :-)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru