Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Re: STM32 новичку в ARM что к чему

Вс май 20, 2018 10:24:18

Сделал как у Вас:
Спойлер
Код:
#include <stm32f10x.h>
#include <main.h>

volatile uint16_t Test_1 = 0;

int main()
{
//Тактируем ядро   

    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
   while((RCC->CFGR & RCC_CFGR_SWS)!=0) {} // !=0 - HSI; !=4 - HSE; !=8 - PLL;
      
   RCC->CFGR &= ~RCC_CFGR_PPRE1;
   while((RCC->CFGR & RCC_CFGR_PPRE1)!=0){}   // !=0 - Not devided; !=1024 - Dev=2; !=1280 - Dev=4; !=1536 - Dev=8; !=1792 - Dev=16;
      
/*Тактируем периферию*/      
   RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;

GPIOB->CRL = 0xDD444444;

  RCC->APB1ENR |= RCC_APB1ENR_I2C1EN;

  I2C1->CR1 = I2C_CR1_SWRST;
  I2C1->CR1 = 0;
  I2C1->CCR = 40;    // F = PCLK1/CCR/2
  I2C1->CR2 = 8;   // Значение PCLK1 [МГц]
  I2C1->TRISE = 9;
  I2C1->CR1 = I2C_CR1_PE;

             /*----------*/
      
//////////////////////////////////////////////////////////////////////////////////////////////////////////                       
   __enable_irq ();

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

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



Источник тактирования приходится ставить вручную, так как если этого не делать, то устанавливается PLL (видимо в стартапе так настроено).
Единственное, в настройках I2C переделал на 100кГц для протокола и на 8Мгц тактирование APB1.
Получается такая хрень (опять тактовый сигнал напоминает черт знает что):
Изображение
Зумм:
Изображение

Re: STM32 новичку в ARM что к чему

Вс май 20, 2018 11:29:41

Я ещё последовательность писал, игнорируете? Если не поможет, ищите аппаратную проблему.

Re: STM32 новичку в ARM что к чему

Вс май 20, 2018 17:44:23

Код оказался рабочим, дело было не в последовательности (хотя, я вроде все как Вы сказали сделал) :) .

Проблема в устройстве, которое сидит на шине. Если его выкинуть и сделать тупо подтяжку на линии по 10КОм, то пачка данных нормально отправляется, а после этого обнаруживается NACK (впрочем так и должно быть - отвечать-то некому). Как только вешаю семисегментник на TM1637, то процесс сбивается так как CLK тупо прижимается к земле. При этом, этот же дисплей нормально работает от программной реализации I2C (та же подтяжка и те же ЛОГ уровни).
Чет я вообще в ступоре.

Добавлено after 4 hours 26 minutes 45 seconds:
Снял логи с программной реализации I2C для семисегментника на TM1637. Какая-то чертовщина там творится. Может кто-нибудь подсказать хотя бы что это за пучок после паузы (паузу в 2 секунды добавил сам, чтоб было удобнее смотреть):
Общий вид:
Изображение

Мелкий пучок:
Изображение

Пакеты после мелкого пучка:
Изображение

Re: STM32 новичку в ARM что к чему

Вс май 20, 2018 18:28:42

На что вы рассчитываете задавая подобные вопросы? Вы там набыдлокодили что-то, а нам гадать даже не видя кода?

Re: STM32 новичку в ARM что к чему

Вс май 20, 2018 19:31:21

Код я выложил двумя постами ранее. Логи тоже. Логи кода, который работает с этим инди втором тоже.
Тут вопрос скорее к самой микросхеме ТМ1637. Можно ли все-таки с ней работать через аппаратный i2c?

Re: STM32 новичку в ARM что к чему

Пн май 21, 2018 05:01:21

Двумя постами выше вы выложили потуги на аппаратный I2C, которые в принципе не могут работать. А вопрос задаёте про ногодрыг, кода которого не показываете. Вы даташит то читали? Там даже код ногодрыга для I2C есть. Вообще не понимаю, документация есть, логический анализатор есть, чего не хватает то?

Re: STM32 новичку в ARM что к чему

Пн май 21, 2018 14:40:17

Я выложил код, который работает нормально без подчиненного устройства, но как только вешается подчиненное, то клок начинает сбоить.
Изначально я спрашивал, с чем может быть свзязано такое поведение, так как сам не особо силён в этом.

Re: STM32 новичку в ARM что к чему

Пн май 21, 2018 14:55:55

Забавно наблюдать как люди теряют свое время не желая пользоваться кубом. Да что уж там - сам был таким.
(Ща бомбанет у половины здесь обитающих :))) )

Re: STM32 новичку в ARM что к чему

Пн май 21, 2018 15:00:56

Надо будет взять ваш код на вооружение, а то я как дурак оказывается фигнёй занимаюсь.
Спойлер
Код:
bool LNA::WriteReg(uint8_t adr, uint8_t data)

  while((pI2C->SR2 & I2C_SR2_BUSY));
 
  pI2C->CR1 = I2C_CR1_PE | I2C_CR1_START;
  while(!(pI2C->SR1 & I2C_SR1_SB));
  pI2C->DR = W_ADR;
  while(!(pI2C->SR1 & I2C_SR1_ADDR))
  {
    if(pI2C->SR1 & I2C_SR1_AF)
    {
      pI2C->CR1 = I2C_CR1_PE | I2C_CR1_STOP;
      return false;
    }
  };
  pI2C->SR2;
  while(!(pI2C->SR1 & I2C_SR1_TXE))
  {
    if(pI2C->SR1 & I2C_SR1_AF)
    {
      pI2C->CR1 = I2C_CR1_PE | I2C_CR1_STOP;
      return false;
    } 
  }
  pI2C->DR = adr;
  while(!(pI2C->SR1 & I2C_SR1_TXE))
  {
    if(pI2C->SR1 & I2C_SR1_AF)
    {
      pI2C->CR1 = I2C_CR1_PE | I2C_CR1_STOP;
      return false;
    } 
  }
  pI2C->DR = data;   
  while(!((pI2C->SR1 & I2C_SR1_TXE) && (pI2C->SR1 & I2C_SR1_BTF)))
  {
    if(pI2C->SR1 & I2C_SR1_AF)
    {
      pI2C->CR1 = I2C_CR1_PE | I2C_CR1_STOP;
      return false;
    }
  }   
  pI2C->CR1 = I2C_CR1_PE | I2C_CR1_STOP;
 
  return true;
}

Re: STM32 новичку в ARM что к чему

Пн май 21, 2018 17:54:45

del

Re: STM32 новичку в ARM что к чему

Вт май 22, 2018 11:46:13

я один проект перевел с spl на LL и 12 кб кода ужалось в 6 кБ :shock:

и да, теперь инит периферии на кубе само удовольствие

Re: STM32 новичку в ARM что к чему

Вт май 22, 2018 11:47:46

что особенно критично когда у тебя 256+ кб флеша.

Re: STM32 новичку в ARM что к чему

Вт май 22, 2018 11:51:26

когда у тебя


16 кБ :( всего

Re: STM32 новичку в ARM что к чему

Вт май 22, 2018 13:22:03

16 кБ :( всего

Такой МК продиктован ценой? Тысячи экземпляров планируется выпускать?

Re: STM32 новичку в ARM что к чему

Ср май 23, 2018 05:59:52

А чем бы не было продиктовано, если код влез в 12 кб и тем более в 6 кб, значит проц выбран правильно.

Re: STM32 новичку в ARM что к чему

Ср май 23, 2018 06:30:23

Нет. Это оправдано только большой партией. Если объем пару десятков плат, то сушить себе мозги чтобы сэкономить пару долларов на МК это неуважение к своему времени.

Re: STM32 новичку в ARM что к чему

Ср май 23, 2018 06:48:49

Это как мозги должны жиром заплыть, чтобы под задачу на 6 кб брать проц на 256.

Re: STM32 новичку в ARM что к чему

Ср май 23, 2018 06:56:47

А не важно сколько кб. Важна только целесообразность траты времени на изучение даташитов и нюансов. Бывает это необходимо, а бывает - нет. Толку от того что Вы постигли дзен из даташита на МК, если такой как я сделает инициализацию периферии за пару минут? Пара сэкономленных долларов на более дешовом мк? Ну эту потерю я переживу. Лучше я почитаю умную книжку и получу знания которые будут актуальны всегда, а не пока жива ST.

Re: STM32 новичку в ARM что к чему

Ср май 23, 2018 07:10:59

Ну так идите и читайте книжки, чего вы поучать программировать stm32 кинулись? Впервые вижу человека, который гордится тем что чего-то не знает и не хочет знать. Голова человеку не только чтобы в неё есть. ДУМАТЬ не только полезно, но и интересно, и приятно. Попробуйте - понравится.

Re: STM32 новичку в ARM что к чему

Ср май 23, 2018 08:20:39

Ну между книжкой Джонсона-Грехема и даташитом на стмку, я выберу первое. И хоть книжка мне дается трудновато и время на нее редко находится, но зато я знаю что вещи которые там описаны будут всегда актуальны и знания не обесценятся.
Лучше я сделаю пару кликов в кубе и займусь действительно программированием, чем буду скролить даташит с пачками регистров.
Знать != думать, прошу заметить. Порой отличники которые много знают совсем не умеют думать.
Ответить