22.02.2017, 14:34
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Чего в RM0008 не сильно то описан модуль прерываний NVIC,статью нашел http://mcucpu.ru/index.php/platformy...vaniya-v-stm32
__________________
Глаза боятся,а руки делают.
|
|
|
|
22.02.2017, 15:24
|
|
Частый гость
Регистрация: 11.02.2017
Сообщений: 25
Сказал спасибо: 11
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
CERGEI1982, NVIC это ядро и надо читать документацию от арм .
|
|
|
|
22.02.2017, 15:48
|
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
От АРМ не обязательно. Нужно тоже читать от СТМ, только док называется Programming manual, на Cortex M3 это PM0056.
|
|
|
|
22.02.2017, 20:24
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от NewWriter
|
Если хотите точно отмерить очень малые интервалы - вставляйте ассемблерные вставки nop-ов или циклов. И в эту задержку закладывайте время исполнения действий.
В любом случае - одну микросекунду - подождете, не опоздаете.
|
Вы просто шутите или у вас это от белой горячки?
|
|
|
|
25.02.2017, 04:09
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Создал файл main.h и подключил в main.c. Перекидываю в main.h определения define ,а в main.c он их не видит define из main.h . Пути прописаны все в конфиге. Чего ему надо не пойму.
main.h
Код:
|
#ifdef MAIN_H
#define MAIN_H
#define DWT_CYCCNT *(volatile unsigned long *)0xE0001004
#define DWT_CONTROL *(volatile unsigned long *)0xE0001000
#define SCB_DEMCR *(volatile unsigned long *)0xE000EDFC
#endif |
main.c
Код:
|
#include "main.h"
#include "init.h"
#define RTE_DEVICE_STDPERIPH_GPIO
#define RTE_DEVICE_STDPERIPH_RCC
#include "stm32f10x.h"
#include "stm32f10x_conf.h"
//void init(void);
uint16_t delay_count=0;
uint16_t flag_count=0;
uint16_t dwt=0;
uint16_t i=0;
void SysTick_Handler(void) // 1 ms
{
delay_count++;
if(delay_count==500)
{
delay_count=0;
flag_count=1;
}
dwt=DWT_CYCCNT;
DWT_CYCCNT = 0;
if(i)
{ GPIO_SetBits(GPIOC,GPIO_Pin_14); i=0;}
else { GPIO_ResetBits(GPIOC,GPIO_Pin_14); i=1;}
}
int main()
{
init();
while(1)
{
GPIO_SetBits(GPIOC,GPIO_Pin_13);
while(!flag_count) ;
flag_count=0;
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
while(!flag_count) ;
flag_count=0;
}
} |
__________________
Глаза боятся,а руки делают.
|
|
|
|
25.02.2017, 04:34
|
|
Вид на жительство
Регистрация: 10.06.2007
Сообщений: 429
Сказал спасибо: 34
Сказали Спасибо 51 раз(а) в 47 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
а там разве первым не #ifndef MAIN_H должен быть?
А так, если MAIN_H не определён, что собственно и есть, то всё в этом main.h пропускается препроцессором. Я так понимаю...
|
|
|
|
25.02.2017, 05:20
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от H4LF
|
а там разве первым не #ifndef MAIN_H должен быть?
А так, если MAIN_H не определён, что собственно и есть, то всё в этом main.h пропускается препроцессором. Я так понимаю...
|
Ой точно,простите за глупый вопрос,спасибо.
__________________
Глаза боятся,а руки делают.
|
|
|
|
28.02.2017, 03:16
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Такты самого таймера для подавления шумов ? Нужно при тактировании с внешним сигналом таймера? Думаю для внутренего тактирования без надобности.
Код:
|
Bits 9:8 CKD[1:0]: Clock division
This bit-field indicates the division ratio between the timer clock (CK_INT) frequency and the
dead-time and sampling clock (tDTS)used by the dead-time generators and the digital filters
(ETR, TIx),
00: tDTS=tCK_INT
01: tDTS=2*tCK_INT
10: tDTS=4*tCK_INT
11: Reserved, do not program this value |
Также хотел спросить по поводу TIM_RepetitionCounter, это как я понял через сколько тактов таймера будет обновляться прескалер и срабатывать событие ?
Ну и жирные же таймеры в стм,по сравнению с пиком.
__________________
Глаза боятся,а руки делают.
Последний раз редактировалось CERGEI1982; 28.02.2017 в 03:21.
|
|
|
|
28.02.2017, 22:53
|
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от CERGEI1982
|
TIM_RepetitionCounter
|
Это число циклов счета от 0 до ARR (при счете вверх, при счете вниз - наоборот, от ARR до 0), в течение которых не будет фиксироваться событие UEV (Update Event). Но остальные события - сравнение по каждому каналу - будут фиксироваться КАЖДЫЙ цикл счета от 0 до ARR.
Соответствиенно, от событий UEV и сравнения зависят например запуск DMA или генерация ШИМ, захваты.
Так же, RepetitionCounter влияет на однократный запуск OPM (One-pulse mode). Благодаря этому можно сгенерировать несколько (до 256) циклов счета и автоматически остановиться.
Совместно с режимом PWM можно сгенерировать заданное число (до 256) импульсов на выходном пине. Либо провести несколько измерений частоты входного сигнала.
А в комбинации с другим таймером (который будет являться запускающим), можно организовать автоматические измерения частоты входного сигнала - через некоторые промежутки времени снимаются несколько последовательных замеров частоты входного сигнала.
Например, реальный случай: потребовалась разная частота генерации событий.
PHP код:
|
/* --------------------------
* Генератор частоты дискретизации ADC и DAC
* SampleRate_ADC - частота дискретизации АЦП.
* DAC_divider - коэфф. уменьшения частоты дискретизации ЦАП относительно АЦП
*/
void SampleRate_Generator_Init(uint32_t SampleRate_ADC, uint8_t DAC_divider)
{
/* SampleRate = SystemCoreClock / ((PSC+1) * ARR) */
/* ARR = SystemCoreClock / (SampleRate * (PSC+1)) */
RCC-›APB2ENR |= RCC_APB2ENR_TIM1EN;
TIM1-›PSC = 0; //1:1
TIM1-›ARR = SystemCoreClock / (SampleRate_ADC) - 1; // частота работы таймера
TIM1-›RCR = DAC_divider-1; // коэффициент деления для DAC
TIM1-›CCR4 = 2; // сдвиг события по времени
TIM1-›CR2 = TIM_CR2_MMS; // TRGO CCR4 для запуска АЦП
TIM1-›CCMR2 = TIM_CCMR2_OC4M; //
TIM1-›DIER = TIM_DIER_UDE; // генерация запроса DMA по UEV для PWM-DAC
TIM1-›CR1 |= TIM_CR1_CEN; // запуск генератора
}
|
По первой части вопроса. Нет, это так сказать, оверсемплинг, при работе с цифровой фильтрацией при захвате внешнего сигнала. Актуально только при включенном делителе шины, от которой тактируется таймер.
Кстати, у таймеров есть очень удобный режим работы с инкрементальными энкодерами.
Последний раз редактировалось NewWriter; 28.02.2017 в 23:46.
|
|
|
Сказали "Спасибо" NewWriter
|
|
|
01.03.2017, 16:32
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Получается в вашем коде TIM1-›RCR это настроено событие для DMA через UEV,который в свою очередь запускает ЦАП, а для АЦП уже без деления TIM1-›RCR через TRGO. Таймер управляет сразу запуском АЦП и ЦАП.
UEV это же событие переполнения,до нуля и т.д.,в голове маленько каша от битов. UG еще есть:
Код:
|
if the URS bit (update request selection) in
TIMx_CR1 register is set, setting the UG bit generates an update event UEV but without setting the UIF flag (thus no interrupt or DMA request is sent). |
Как я уже сообразил по блок схеме. Таймер может работать как в Master режиме так и Slave. И в зависимости от режима управляет чем то TRGO или управляется TRGI.
__________________
Глаза боятся,а руки делают.
Последний раз редактировалось CERGEI1982; 01.03.2017 в 16:45.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 07:57.
|
|