Например TDA7294

Форум РадиоКот • Просмотр темы - STM32 новичку в ARM что к чему
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вс ноя 23, 2025 02:44:15

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 8919 ]     ... , , , 194, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Чт май 17, 2018 07:48:41 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 11
Рейтинг сообщений: 26
Зарегистрирован: Вс июн 26, 2011 20:03:21
Сообщений: 2316
Рейтинг сообщения: 0
Получается, что в плане общения с модулем разницы никакой нет между F1 и F4?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Чт май 17, 2018 07:53:00 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 433
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2544
Рейтинг сообщения: 1
Да инициализация то в I2C не самое главное. Там как раз всё просто.
Код:
//В хидер процессора
#define I2C_CCR_CCR(value)                  ((I2C_CCR_CCR_Msk & ((value) << I2C_CCR_CCR_Pos)))
#define I2C_CR2_FREQ(value)                 ((I2C_CR2_FREQ_Msk & ((value) << I2C_CR2_FREQ_Pos)))


//Инициализация
// Ножки SDA и SCL предварительно установить в OUTPUT2_ALT_OPEN_DRAIN

  RCC->APB1ENR |= RCC_APB1ENR_I2C1EN;

  I2C1->CR1 = I2C_CR1_SWRST;
  I2C1->CR1 = 0;
  I2C1->CCR = I2C_CCR_CCR(45);    // F = PCLK1/CCR/2
  I2C1->CR2 = I2C_CR2_FREQ(36);   // Значение PCLK1 [МГц]
  I2C1->TRISE = 9;
  I2C1->CR1 = I2C_CR1_PE;

Основные заморочки при передаче все состояния правильно обработать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Чт май 17, 2018 08:41:39 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 1
isx, новые модули в F7 и F0 , вот там как раз с инициализацией все не просто. Зато работа с ним намного проще и эффективней.

Получается, что в плане общения с модулем разницы никакой нет между F1 и F4?

На F1 есть пакости в errata ...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Чт май 17, 2018 11:38:49 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 11
Рейтинг сообщений: 26
Зарегистрирован: Вс июн 26, 2011 20:03:21
Сообщений: 2316
Рейтинг сообщения: 0
Всем спасибо) Полез в errata :)

Добавлено after 1 hour 38 minutes 14 seconds:
Ещё вопрос возник. Сегодня буду пытаться прикрутить к f103 семисегментник на TM1637. Там фишка в том, что эта микра не поддерживает адресацию и сразу надо слать команду.
Это как-то отразится на работе или можно тупо после старта засылать байт с командой?


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Чт май 17, 2018 12:36:31 
Мучитель микросхем
Аватар пользователя

Карма: 6
Рейтинг сообщений: 87
Зарегистрирован: Вс янв 09, 2011 23:05:37
Сообщений: 450
Откуда: СССР
Рейтинг сообщения: 0
Там не I2C....

_________________
Иван Сусанин - первый полупроводник :solder:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Чт май 17, 2018 13:30:53 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
Там не I2C....


Правильно будет - "Там не совсем i2c" ...

isx, все в твоих руках ...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Чт май 17, 2018 15:07:48 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 11
Рейтинг сообщений: 26
Зарегистрирован: Вс июн 26, 2011 20:03:21
Сообщений: 2316
Рейтинг сообщения: 0
А этот «не совсем i2c» можно завести на аппаратном модуле STM? Или лучше написать программный ногодрыг?


Последний раз редактировалось isx Чт май 17, 2018 15:17:14, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Чт май 17, 2018 15:14:50 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
С таким настроением лучше на авр сидеть...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Чт май 17, 2018 15:20:24 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 11
Рейтинг сообщений: 26
Зарегистрирован: Вс июн 26, 2011 20:03:21
Сообщений: 2316
Рейтинг сообщения: 0
Да настрой нормальный :) Просто я не в курсе, может они в принципе железно несовместимы (как SPI и нормальный I2C). Вот и решил спросить у знающих, чтоб не ходить по уже истоптанным граблям.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Чт май 17, 2018 16:36:15 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
Програмный догодрыг всегда зло...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Чт май 17, 2018 18:17:09 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2708
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
isx писал(а):
Там фишка в том, что эта микра не поддерживает адресацию и сразу надо слать команду.
Физически то чем адрес от команды отличается?

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Чт май 17, 2018 18:30:44 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 11
Рейтинг сообщений: 26
Зарегистрирован: Вс июн 26, 2011 20:03:21
Сообщений: 2316
Рейтинг сообщения: 0
Там же к 7-ми битам адреса привязывается бит Read/Write. Он не аппаратно ставится после передачи старт бита?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Чт май 17, 2018 19:13:12 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2708
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Может и не получится I2C использовать.
Но есть же еще SPI, может можно примонстрячить.
USART в синхронном режиме.
А может в асинхронном, но два UARTa одновременно (почти одновременно)?
:dont_know:

Действительно. Программный ногодрыг на таком контроллере как-то не интересно, но можно и на ногодрыге.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Чт май 17, 2018 21:38:46 
Грызет канифоль
Аватар пользователя

Карма: 2
Рейтинг сообщений: 24
Зарегистрирован: Вс янв 18, 2009 20:15:27
Сообщений: 256
Откуда: UA ZT
Рейтинг сообщения: 0
уважаемые коты :))

А LL либы уже кто то юзал ? как оно ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Чт май 17, 2018 22:46:34 
Друг Кота

Карма: 20
Рейтинг сообщений: 230
Зарегистрирован: Пт сен 13, 2013 13:11:31
Сообщений: 6452
Рейтинг сообщения: 0
Немного полегче и попроще, чем HAL, но все одно -- на любителя.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Пт май 18, 2018 00:43:28 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 11
Рейтинг сообщений: 26
Зарегистрирован: Вс июн 26, 2011 20:03:21
Сообщений: 2316
Рейтинг сообщения: 0
Ещё вопрос по I2C.
Нашел в даташите расчет битов CCR регистра CCR. Там такой пример:
Цитата:
For instance: in Sm mode, to generate a 100 kHz SCL frequency:
If FREQR = 08, TPCLK1 = 125 ns so CCR must be programmed with 0x28
(0x28 <=> 40d x 125 ns = 5000 ns.)

Ну про FREQR = 08 понятно (расчет для частоты тактирования шины равной 8МГц). 125ns тоже понятно (длительность такта при 8МГц).
Откуда появилось 5000 ns?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Пт май 18, 2018 01:58:11 
Друг Кота

Карма: 38
Рейтинг сообщений: 618
Зарегистрирован: Пн апр 06, 2015 11:01:53
Сообщений: 3092
Откуда: москва, уфа
Рейтинг сообщения: 0
Немного полегче и попроще, чем HAL, но все одно -- на любителя.

если по объему сгенеренного кода смотреть - тогда намного. Местами раз в пять-шесть. Оттуда выкинут HAL-овский бред с callback-ами, всякая мелочь типа дрыгоножества сделана макросами или static inline-ами, нет необходимости все делать через жирные FOO_InitTypeDef, и вообще внутри оно весьма напоминает SPL.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Пт май 18, 2018 05:33:39 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 433
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2544
Рейтинг сообщения: 1
Откуда появилось 5000 ns?

100 кГц скважность 2.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вс май 20, 2018 00:57:17 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 11
Рейтинг сообщений: 26
Зарегистрирован: Вс июн 26, 2011 20:03:21
Сообщений: 2316
Рейтинг сообщения: 0
Чет я вообще ниче не пойму. Сделал предварительные настройки для I2c в F103, чтоб поиграться через поллинг:
Спойлер
Код:
   RCC->CFGR &= ~RCC_CFGR_SW; //Очистка битов выбора источника тактового сигнала
   RCC->CR &= ~RCC_CR_PLLON; //Отключаем генератор PLL
   RCC->CR &= ~RCC_CR_HSEON;
   while((RCC->CR & RCC_CR_HSERDY)!=0) {}
   
   RCC->CR |= RCC_CR_HSION; //Включить генератор HSI
   while((RCC->CR & RCC_CR_HSIRDY)==0) {}
   RCC->CFGR |= RCC_CFGR_SW_HSI; //Выбрать источником тактового сигнала HSI
      
      
/*Тактируем периферию*/      
   RCC->APB1ENR |= RCC_APB1ENR_I2C1EN;
   RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
   
         
              /*----------*/

/*Настраиваем Порт B*/      
   GPIOB->CRL = 0xDD444444;
                  
             /*----------*/   

  I2C1->CR1 = I2C_CR1_SWRST;
  I2C1->CR1 = 0;
   I2C1->CR2 = 0;
   I2C1->OAR1 = 0;
   I2C1->OAR2 = 0;
   I2C1->SR1 = 0;
   I2C1->SR2 = 0;      
   I2C1->CCR = 0;
  I2C1->TRISE = 2;
   
   I2C1->CR1 |=
                           //I2C_CR1_PE |            /*!< Peripheral Enable */
                           //I2C_CR1_SMBUS |            /*!< SMBus Mode */
                           //I2C_CR1_SMBTYPE |            /*!< SMBus Type */
                           //I2C_CR1_ENARP |            /*!< ARP Enable */
                           //I2C_CR1_ENPEC |            /*!< PEC Enable */
                           //I2C_CR1_ENGC |            /*!< General Call Enable */
                           //I2C_CR1_NOSTRETCH |            /*!< Clock Stretching Disable (Slave mode) */
                           //I2C_CR1_START |            /*!< Start Generation */
                           //I2C_CR1_STOP |            /*!< Stop Generation */
                           //I2C_CR1_ACK |            /*!< Acknowledge Enable */
                           //I2C_CR1_POS |            /*!< Acknowledge/PEC Position (for data reception) */
                           //I2C_CR1_PEC |            /*!< Packet Error Checking */
                           //I2C_CR1_ALERT |            /*!< SMBus Alert */
                           //I2C_CR1_SWRST   |         /*!< Software Reset */
                           0;

   I2C1->CR2 |=
                           //I2C_CR2_FREQ |            /*!< FREQ[5:0] bits (Peripheral Clock Frequency) ((uint16_t)0x003F)*/
                           //I2C_CR2_FREQ_0 |            /*!< Bit 0 */
                           //I2C_CR2_FREQ_1 |            /*!< Bit 1 */
                           I2C_CR2_FREQ_2 |            /*!< Bit 2 */
                           //I2C_CR2_FREQ_3 |            /*!< Bit 3 */
                           //I2C_CR2_FREQ_4 |            /*!< Bit 4 */
                           //I2C_CR2_FREQ_5 |            /*!< Bit 5 */
                              
                           //I2C_CR2_ITERREN |            /*!< Error Interrupt Enable */
                           //I2C_CR2_ITEVTEN |            /*!< Event Interrupt Enable */
                           //I2C_CR2_ITBUFEN |            /*!< Buffer Interrupt Enable */
                           //I2C_CR2_DMAEN |            /*!< DMA Requests Enable */
                           //I2C_CR2_LAST |            /*!< DMA Last Transfer */
                           0;
   
   I2C1->OAR1 |=
                           //I2C_OAR1_ADD1_7 |            /*!< Interface Address ((uint16_t)0x00FE)*/
                           //I2C_OAR1_ADD8_9 |            /*!< Interface Address ((uint16_t)0x0300)*/
                           //I2C_OAR1_ADD0 |            /*!< Bit 0 */
                           //I2C_OAR1_ADD1 |             /*!< Bit 1 */
                           //I2C_OAR1_ADD2 |            /*!< Bit 2 */
                           //I2C_OAR1_ADD3 |            /*!< Bit 3 */
                           //I2C_OAR1_ADD4 |            /*!< Bit 4 */
                           //I2C_OAR1_ADD5 |            /*!< Bit 5 */
                           //I2C_OAR1_ADD6 |            /*!< Bit 6 */
                           //I2C_OAR1_ADD7 |            /*!< Bit 7 */
                           //I2C_OAR1_ADD8 |            /*!< Bit 8 */
                           //I2C_OAR1_ADD9 |            /*!< Bit 9 */
                           //I2C_OAR1_ADDMODE |            /*!< Addressing Mode (Slave mode) */
                           0;
   
   I2C1->OAR2 |=
                           //I2C_OAR2_ENDUAL |            /*!< Dual addressing mode enable */
                           //I2C_OAR2_ADD2 |             /*!< Interface address ((uint8_t)0xFE)*/
                           0;
   
   //I2C1->DR =    I2C_DR_DR;              /*!< 8-bit Data Register ((uint8_t)0xFF)*/

   
   I2C1->CCR |=      20 |
                           //I2C_CCR_CCR |            /*!< Clock Control Register in Fast/Standard mode (Master mode) ((uint16_t)0x0FFF)*/
                           //I2C_CCR_DUTY |            /*!< Fast Mode Duty Cycle */
                           //I2C_CCR_FS |             /*!< I2C Master Mode Speed Selection */
                           0;
                           
                           /*For instance: in Sm mode, to generate a 100 kHz SCL frequency:
                           If FREQR = 08, TPCLK1 = 125 ns so CCR must be programmed with 0x28 (40)
                           (0x28 <=> 40d x 125 ns = 5000 ns.)*/
   
   I2C1->TRISE = 9;
                           //I2C_TRISE_TRISE;            /*!< Maximum Rise Time in Fast/Standard mode (Master mode) ((uint8_t)0x3F)*/
                           
      
   I2C1->CR1 |= I2C_CR1_PE;
             /*----------*/
   
   __enable_irq ();

   while(1)
   {
      I2C1->CR1 |= I2C_CR1_START;
      while (!(I2C1->SR1 & I2C_SR1_SB)){;}
      Test_1 = I2C1->SR1;
      I2C1->DR = TM1637_DSC;

      Test_1 = 1;
      
      while(1){}   
   }
}



TM1637_DSC = 0x40. После старта код успешно доходит до строки Test_1 = 1; .

Только вот тактового сигнала нет. В логанализаторе такая хрень:
Изображение

Что я делаю не так? :dont_know:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вс май 20, 2018 08:26:49 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 433
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2544
Рейтинг сообщения: 1
1. I2C не терпит суеты. Я же привёл код для инициализации.
2. Вы же от HSI работаете, он при включении установлен, зачем его дрюкать? Это к делу не относится, выкинуть.
3. При передаче:
- ждём пока I2C_SR2_BUSY
- ставим I2C_CR1_START
- ждём пока не упадёт I2C_SR1_SB
- пишем в DR адрес
- ждем пока не вскочит I2C_SR1_ADDR (одновременно смотрим на вскочил ли I2C_SR1_AF, тогда I2C_CR1_STOP и выход)
- читаем SR2
- ждем пока не вскочит I2C_SR1_TXE (одновременно смотрим на вскочил ли I2C_SR1_AF, тогда I2C_CR1_STOP и выход)
- пишем в DR данные
- ждем пока не вскочит I2C_SR1_TXE (одновременно смотрим на вскочил ли I2C_SR1_AF, тогда I2C_CR1_STOP и выход)
- даём I2C_CR1_STOP


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 8919 ]     ... , , , 194, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y