Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 01.03.2017, 19:20  
NewWriter
Заблокирован
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Да. Мне в том случае требовалось, чтобы частота дискретизации АЦП была в 4 раза выше частоты дискретизации ЦАП. Это было применительно к аудиосигналу.
Но позже, в результате испытаний выяснил, что и для ЦАП тоже нужна высокая частота дискретизации - так называемый оверсемплинг. Это позволяет улучшить работу фильтра, подавляющего гармоники частоты дискретизации. Поэтому, от RCR отказался.
Не зря же во всех нормальных аудио-ЦАПах как раз и применяется внутренний оверсемплинг в 64 или 128 раз.

UG - это Update Generation, принудительная геренация событития UEV (обновления). То есть, можно записать TIM1-›EGR = TIM_EGR_UG, и таймер начнет считать с 0 (или с ARR, если счет вниз) и будет сгенерировано UEV.
Это можно использовать для программной синхронизации счета таймера с каким-либо программным событием. Например, после приема по UART байта 0x30 нужно отсчитать 10 секунд.

URS в регистре CR1 - это выбор источников, приводящих к генерации прерывания или запроса DMA по событию обновления.
В нормальном режиме (бит не установлен) прерыв.или запрос DMA по UEV возможны от любого источника - переполнение таймнра (цикл счета), программная генерация обновления UG, триггеры запуска. При установленном бите этим источником является только переполнение таймера.
Есть еще один интересный бит в CR1 - UDIS, запрет геренации события обновления. Причем, счетчик считает как и положено, а вот ни прерывания, ни запроса DMA, ни даже загрузки нового значения ARR - не будет.
Реклама:

Последний раз редактировалось NewWriter; 01.03.2017 в 19:41.
NewWriter вне форума  
Непрочитано 01.03.2017, 22:20  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Мужики, поделитесь, пожалуйста, рабочим примером (без калокубов) I2C1 на STM32F042. А то что-то туплю.
Инициализирую:
Нажмите, чтобы открыть спойлер

Код:
void i2c_setup(){
    // GPIO
    RCC-›AHBENR |= RCC_AHBENR_GPIOAEN; // clock
    GPIOA-›AFR[1] &= ~0xff0; // alternate function F1 for PB10 & PB11
    GPIOA-›AFR[1] |= 0x440;
    GPIOA-›OTYPER |= GPIO_OTYPER_OT_9 | GPIO_OTYPER_OT_10; // opendrain
    GPIOA-›MODER &= ~(GPIO_MODER_MODER9 | GPIO_MODER_MODER10);
    GPIOA-›MODER |= GPIO_MODER_MODER9_AF | GPIO_MODER_MODER10_AF; // alternate function
    // I2C
    RCC-›APB1ENR |= RCC_APB1ENR_I2C1EN; // timing
    RCC-›CFGR3 |= RCC_CFGR3_I2C1SW; // use sysclock for timing
    // Clock = 6MHz, 0.16(6)us, need 5us (*30)
    // PRESC=4 (f/5), SCLDEL=0 (t_SU=5/6us), SDADEL=0 (t_HD=5/6us), SCLL,SCLH=14 (2.(3)us)
    I2C1-›TIMINGR = (4‹‹28) | (14‹‹8) | (14); // 0x40000e0e
    I2C1-›CR1 = I2C_CR1_PE;// | I2C_CR1_RXIE; // Enable I2C 
}

Пытаюсь писать:
Нажмите, чтобы открыть спойлер

Код:
uint8_t htu_write_i2c(uint8_t data){
    while(I2C1-›ISR & I2C_ISR_BUSY);  // check busy
    while(I2C1-›CR2 & I2C_CR2_START); // check start
    I2C1-›CR2 = 1‹‹16 | HTU21_ADDR | I2C_CR2_AUTOEND;  // 1 byte, autoend
    // now start transfer
    I2C1-›CR2 |= I2C_CR2_START;
    while(!(I2C1-›ISR & I2C_ISR_TXIS)){ // ready to transmit
        if(I2C1-›ISR & I2C_ISR_NACKF){
            I2C1-›ICR |= I2C_ICR_NACKCF;
            return 0;
        }
    }
    I2C1-›TXDR = data; // send data
    return 1;
}

Нагрузки на линии нет, нет и подтягивающих резисторов (хочу для начала проверить, как оно будет себя при обрыве вести). На
Код:
while(!(I2C1-›ISR & I2C_ISR_TXIS)){
Виснет! Я так понимаю, что раз подтяжки нет, он NACK не получает что ли?
И как в этом случае правильно ожидать подтверждения, чтобы зависона не было?
__________________
Союз Советских Социалистических Округов Северной Америки
eddy вне форума  
Непрочитано 01.03.2017, 22:35  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Читай доки по И2Ц и референс для МК. Рано тебе ещё прогу писать.
STM32F0 вне форума  
Непрочитано 01.03.2017, 22:50  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Все заработало. Добавил проверку таймаутов:
Нажмите, чтобы открыть спойлер
Код:
extern volatile uint32_t Tms; // system counter, milliseconds
uint8_t htu_write_i2c(uint8_t data){
    cntr = Tms;
    while(I2C1-›ISR & I2C_ISR_BUSY) if(Tms - cntr › 5) return 0;  // check busy
    cntr = Tms;
    while(I2C1-›CR2 & I2C_CR2_START) if(Tms - cntr › 5) return 0; // check start
    I2C1-›CR2 = 1‹‹16 | HTU21_ADDR | I2C_CR2_AUTOEND;  // 1 byte, autoend
    // now start transfer
    I2C1-›CR2 |= I2C_CR2_START;
    cntr = Tms;
    while(!(I2C1-›ISR & I2C_ISR_TXIS)){ // ready to transmit
        if(I2C1-›ISR & I2C_ISR_NACKF){
            I2C1-›ICR |= I2C_ICR_NACKCF;
            return 0;
        }
        if(Tms - cntr › 5) return 0;
    }
    I2C1-›TXDR = data; // send data
    return 1;
}

Теперь просто 0 возвращает, если отключить датчик.
Странно, что с лету завелось (думал, с таймингами дольше возиться буду). Разве что ересь какую-то пишет:
Код:
Temperature: 264/10 degrC
Humidity: 3/10 %
Хотя влажность 38%... Сейчас буду разбираться.
Нашел косяк - вместо умножния на 10 зачем-то в вычислялке температуры делил.
Вот код на гитхабе
__________________
Союз Советских Социалистических Округов Северной Америки

Последний раз редактировалось eddy; 01.03.2017 в 22:58.
eddy вне форума  
Непрочитано 08.03.2017, 04:16  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Tdts - это такт таймера ?
И включается dead-time при включении CCxE=1 and CCxNE=1 как я понял.
Миниатюры:
Нажмите на изображение для увеличения
Название: 2017-03-08_08-15-20.png
Просмотров: 0
Размер:	77.6 Кб
ID:	111427  
__________________
Глаза боятся,а руки делают.

Последний раз редактировалось CERGEI1982; 08.03.2017 в 04:46.
CERGEI1982 вне форума  
Непрочитано 08.03.2017, 23:59  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Господа, запускаю консоль USART на STM32F030CC. Данные приходят и по средствам DMA ложатся в буфер. Требуется вызвать прерывание по совпадению символа (\n) - перенос каретки. Все прерывания работают, кроме этого. Не вызывается никак. Инитиализирую так:
USART3-›CR2 |= ('\n' ‹‹ 24);
USART_ITConfig(USART3, USART_IT_CM, ENABLE);
Может я чего-то не понимаю? DMA работает исправно. Данные входят-выходят, но никак не вызывается конкретно это прерывание.
Easyrider83 вне форума  
Непрочитано 09.03.2017, 03:15  
AR_Favorit
Почётный гражданин KAZUS.RU
 
Регистрация: 13.03.2010
Сообщений: 2,897
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от Easyrider83 Посмотреть сообщение
USART3-›CR2 |= ('\n' ‹‹ 24);
А в этот CR2 отладчиком смотрели, там записывается то, что вы хотели, в нужных позициях? А то так-то без приведения '\n' к uint32 выражение ('\n' ‹‹ 24) вполне себе имеет право быть равно нулю...
AR_Favorit вне форума  
Непрочитано 09.03.2017, 10:26  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

AR_Favorit, да, разумеется, все что можно, проверено.
Сейчас работает по прерыванию Time Out. Но это расходится с логикой консоли. Символы могут вводится и вручную, надо ловить перенос каретки, а не пихать потом задержки между передачами.
Easyrider83 вне форума  
Непрочитано 09.03.2017, 10:56  
AR_Favorit
Почётный гражданин KAZUS.RU
 
Регистрация: 13.03.2010
Сообщений: 2,897
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Easyrider83, хм, а разве STM32F030 вообще умеет такое? Из RM0360 все упоминания о "CR/LF character recognition", как и вообще о модбасе, выпилены (в описании регистров USARTx_CR2 и USARTx_ISR осталось, но, возможно, просто злокопипаст), в отличие от RM0091, который идет на STM32F031...

Последний раз редактировалось AR_Favorit; 09.03.2017 в 11:00.
AR_Favorit вне форума  
Непрочитано 09.03.2017, 11:14  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Цитата:
Bits 31:28 ADD[7:4]: Address of the USART node
This bit-field gives the address of the USART node or a character code to be recognized.
This is used in multiprocessor communication during Mute mode or Stop mode, for wakeup with 7-
bit address mark detection. The MSB of the character sent by the transmitter should be equal to 1.
It may also be used for character detection during normal reception, Mute mode inactive . In this
case, the whole received character (8-bit) is compared to the ADD[7:0] value and CMF flag is set on
match.

This bit field can only be written when reception is disabled (RE = 0) or the USART is disabled
(UE=0)
Да вроде как все должен делать.

Последний раз редактировалось Easyrider83; 09.03.2017 в 20:17.
Easyrider83 вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Школа АRMрестлинга Uragan90 Микроконтроллеры, АЦП, память и т.д 54 22.08.2011 16:13
ARM Cortex M3 + Linux SiMiLya Микроконтроллеры, АЦП, память и т.д 10 17.06.2011 17:20
Помогите с STM32 - очень нужно... yakuzaa Микроконтроллеры, АЦП, память и т.д 60 04.08.2010 11:04
Как добавить поддержку для STM32 SFHK Микроконтроллеры, АЦП, память и т.д 11 18.12.2009 18:09


Часовой пояс GMT +4, время: 07:39.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot