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

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Друг Кота
Сообщения: 6457
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

Вроде это не GD32 и цена довольно интересная. По даташиту оно на stm32f103c8t6 вполне походит.

Изображение

Никто не в курсе, что это за чудо природы?
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

А у меня не ищется на али по таким данным...
А не нашлось, единственный продован с нулем продаж по сабжу и с 5ю жалобами на другие.

Мяукните, ваш неудачный опыт в кодинге на асме, это лишь ваши неудачи и неболее. Не баги в камнях и не какая-то там ахинея...
Реклама
Друг Кота
Сообщения: 6457
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

Я бы не придал значения, какие там китайцы какой самобытной хренью торгуют, если бы не история с продвинутым клоном атмеги328 от этого же продавца. У меня нет никаких подтверждений, но не ровен час, что и с этим CS32 может выйти похожая история.
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

a5021, не я пока пасс. Сейчас перевожу мануал на HC32, затем на очереди SYNWIT...
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Сообщения: 6457
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

Загадаю присутствующим загадку: почему в таком обработчике

Код: Выделить всё

void TIM4_IRQHandler(void) {
  TIM4->SR = ~TIM_SR_UIF;
  GPIOA->ODR ^= 1;
}
блинк мигает, а в таком

Код: Выделить всё

void TIM4_IRQHandler(void) {
  GPIOA->ODR ^= 1;
  TIM4->SR = ~TIM_SR_UIF;
}
нет? :)

PS. Строки абсолютно идентичные, просто идут в разной последовательности. F103, если что.
Реклама
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="a5021",url="/forum/viewtopic.php?p=3501529#p3501529"]Загадаю присутствующим загадку[/uquote]
Придумай что-то поинтереснее, такие загадки на каком-то из форумов соответствующей тематики наверно каждую неделю разгадывают, на этой была тема на easyelectronics :)
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

На пятничную "разборку" не тянет. :( Тык!
Друг Кота
Сообщения: 6457
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

Не, так не честно. :) Я был не в курсе, что этот вопрос только что на изи обсуждался.
Друг Кота
Аватара пользователя
Сообщения: 3386
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

Это одни из грабель, на которые наступают новички. Просто нужно запомнить что флаги необходимо сбрасывать вначале обработчика, а не в конце.
Друг Кота
Сообщения: 6457
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

Да можно и в конце, только не перед самым выходом. Вот так уже работает:

Код: Выделить всё

void TIM4_IRQHandler(void) {
  GPIOA->ODR ^= 1;
  TIM4->SR = ~TIM_SR_UIF;
  TIM4->SR;
}
Друг Кота
Сообщения: 6457
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

Документация у стм-ов местами просто "Ад и Израиль". Читаю RM0008 (STM32F103) в части I2C операций. Пишут какую-то дикую херню:
The master can decide to enter Transmitter or Receiver mode depending on the LSB of the
slave address sent.

In 7-bit addressing mode,
- To enter Transmitter mode, a master sends the slave address with LSB reset.
- To enter Receiver mode, a master sends the slave address with LSB set
Дебилы вы сраные -- мысленно обращаюсь я к составителям документации -- из-за вас только время лишнее потерял. Не в адресе должен быть "LSB reset", а следующий бит после адреса. При этом, перед записью в I2C_DR, 7 бит адреса должны быть выравняны влево, а оставшийся младший бит уже определять тип операции запись/чтение. Но про это в RM0008 ни пол слова.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Блин, это же стандарт, про это даже на WiKi расписано. Как это может вызывать затруднения?
Друг Кота
Сообщения: 6457
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

Вы не из составителей документации будете? Сильно уж не понимаете в чем суть вопроса.
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

[uquote="a5021",url="/forum/viewtopic.php?p=3503937#p3503937"]Документация у стм-ов местами просто "Ад и Израиль". Читаю RM0008 (STM32F103) в части I2C операций. Пишут какую-то дикую херню:
The master can decide to enter Transmitter or Receiver mode depending on the LSB of the
slave address sent.

In 7-bit addressing mode,
- To enter Transmitter mode, a master sends the slave address with LSB reset.
- To enter Receiver mode, a master sends the slave address with LSB set
Дебилы вы сраные -- мысленно обращаюсь я к составителям документации -- из-за вас только время лишнее потерял. Не в адресе должен быть "LSB reset", а следующий бит после адреса. При этом, перед записью в I2C_DR, 7 бит адреса должны быть выравняны влево, а оставшийся младший бит уже определять тип операции запись/чтение. Но про это в RM0008 ни пол слова.[/uquote]

Все правильно там написано.
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Друг Кота
Сообщения: 6457
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

Я вас поздравляю с этим "открытием". Стало быть, в адресе младший бит надо сбрасывать перед записью и взводить перед чтением? Не хотите попробовать?
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="a5021",url="/forum/viewtopic.php?p=3503990#p3503990"]Я вас поздравляю с этим "открытием". Стало быть, в адресе младший бит надо сбрасывать перед записью и взводить перед чтением? Не хотите попробовать?[/uquote]Именно так.
Спойлер

Код: Выделить всё

#define EE_HW_ADR 0         //Адрес заданный ножками A0,A1,A2 на микросхеме 24C512
#define EE_I2C_PORT I2C1    //I2C-порт процессора

EE_24C eeprom(EE_I2C_PORT,EE_HW_ADR);  //Создаём объект EEPROM

//Конструктор
EE_24C::EE_24C(I2C_TypeDef *pi2c, uint8_t hw_adr) 
{ 
  pI2C=pi2c; 
  w_adr=0xA0+((hw_adr&0x7)<<1); 
  r_adr=0xA1+((hw_adr&0x7)<<1); 
};

//Чтение байта по адресу
bool EE_24C::ReadByte(uint16_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;                               // w_adr = 0xA0
  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));
  pI2C->DR = adr>>8;
  while(!(pI2C->SR1 & I2C_SR1_TXE));
  pI2C->DR = adr;
  while(!((pI2C->SR1 & I2C_SR1_TXE) && (pI2C->SR1 & I2C_SR1_BTF)));   
  pI2C->CR1 = I2C_CR1_PE | I2C_CR1_START | I2C_CR1_ACK;                //START
  while(!(pI2C->SR1 & I2C_SR1_SB));
  pI2C->DR = r_adr;                                                     // r_adr = 0xA1
  while(!(pI2C->SR1 & I2C_SR1_ADDR));
  pI2C->SR2;
  pI2C->CR1 = I2C_CR1_PE | I2C_CR1_STOP;
  while(!(pI2C->SR1 & I2C_SR1_RXNE)); 
  *data = pI2C->DR;
  
  return true;
};
Последний раз редактировалось VladislavS Вт ноя 13, 2018 19:10:26, всего редактировалось 1 раз.
Друг Кота
Сообщения: 6457
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3504022#p3504022"]Именно так.[/uquote]
У вас со зрением плохо или с английским?
Последний раз редактировалось a5021 Вт ноя 13, 2018 18:52:32, всего редактировалось 1 раз.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Страница 769.
Изображение
i2c.png
(6.08 КБ) 721 скачивание
Как это можно по другому трактовать? Address и Device Address это разные вещи. Младший бит адреса отвечает за направление передачи. У всех работает, только ты один д'Артаньян :)

Неужели никогда вот такую картинку не видел?
Изображение
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

a5021, ляпов в мануале на F1 предостаточно, не реагируй так. Бывало и в другие линейки перестаскивали копипастом.
А что у остальных с языком все так плохо?

VladislavS, в цитате четко прописано - режим манипулируется именно младшим битом 7битного адреса , что есть ляп. Я понимаю что у тебя амбиции, но факт есть факт...
Последний раз редактировалось dosikus Вт ноя 13, 2018 19:11:12, всего редактировалось 1 раз.
Друг Кота
Сообщения: 6457
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3504085#p3504085"]Как это можно по другому трактовать? Address и Device Address это разные вещи.[/uquote]
Ну-ка, ну-ка. В чем принципиальная разница, не сформулируете?
Младший бит адреса отвечает за направление передачи.
Это вы только что из носа выковыряли или мож вам пойти самому вику почитать, которой вы надысь козыряли? Это ничего, что семибитная адресация в I2C ? "Младший бит", в вашей системе координат, восьмым тогда получается. Семибитная адресация восемью битами, да? Это популярное изложение от и для умственно-отсталых?

У всех работает, только ты один д'Артаньян
Вы за себя ответить не можете, но замахиваетесь, как обычно, на ответ за всех. Поздравляю!
Неужели никогда вот такую картинку не видел?
Изображение
Для вас это означает худшее -- у вас все плохо не с английским или зрением, а со зрением и английским одновременно. На этой картинке семь бит в адресе и два вне его. Хоть усрись, а менять LSB в адресе ни к чему хорошему не приведет. Стыдобища!

Добавлено after 1 minute 45 seconds:
[uquote="dosikus",url="/forum/viewtopic.php?p=3504120#p3504120"]a5021, ляпов в мануале на F1 предостаточно, не реагируй так.[/uquote]
Все никак не привыкну.
Ответить

Вернуться в «ARM»