Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум


 
Опции темы

Изучаем STM32 Cortex M3

Непрочитано 27.01.2011, 01:39  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Теперь смотрим структуру регистров I2C :


Код:
typedef struct
{
  __IO uint16_t CR1;
  uint16_t  RESERVED0;
  __IO uint16_t CR2;
  uint16_t  RESERVED1;
  __IO uint16_t OAR1;
  uint16_t  RESERVED2;
  __IO uint16_t OAR2;
  uint16_t  RESERVED3;
  __IO uint16_t DR;
  uint16_t  RESERVED4;
  __IO uint16_t SR1;
  uint16_t  RESERVED5;
  __IO uint16_t SR2;
  uint16_t  RESERVED6;
  __IO uint16_t CCR;
  uint16_t  RESERVED7;
  __IO uint16_t TRISE;
  uint16_t  RESERVED8;
} I2C_TypeDef;

И определение битов


Код:
/**************************************************  ****************************/
/*                                                                            */
/*                      Inter-integrated Circuit Interface                    */
/*                                                                            */
/**************************************************  ****************************/

/*******************  Bit definition for I2C_CR1 register  ********************/
#define  I2C_CR1_PE                          ((uint16_t)0x0001)            /*!‹Peripheral Enable */
#define  I2C_CR1_SMBUS                       ((uint16_t)0x0002)            /*!‹SMBus Mode */
#define  I2C_CR1_SMBTYPE                     ((uint16_t)0x0008)            /*!‹SMBus Type */
#define  I2C_CR1_ENARP                       ((uint16_t)0x0010)            /*!‹ARP Enable */
#define  I2C_CR1_ENPEC                       ((uint16_t)0x0020)            /*!‹PEC Enable */
#define  I2C_CR1_ENGC                        ((uint16_t)0x0040)            /*!‹General Call Enable */
#define  I2C_CR1_NOSTRETCH                   ((uint16_t)0x0080)            /*!‹Clock Stretching Disable (Slave mode) */
#define  I2C_CR1_START                       ((uint16_t)0x0100)            /*!‹Start Generation */
#define  I2C_CR1_STOP                        ((uint16_t)0x0200)            /*!‹Stop Generation */
#define  I2C_CR1_ACK                         ((uint16_t)0x0400)            /*!‹Acknowledge Enable */
#define  I2C_CR1_POS                         ((uint16_t)0x0800)            /*!‹Acknowledge/PEC Position (for data reception) */
#define  I2C_CR1_PEC                         ((uint16_t)0x1000)            /*!‹Packet Error Checking */
#define  I2C_CR1_ALERT                       ((uint16_t)0x2000)            /*!‹SMBus Alert */
#define  I2C_CR1_SWRST                       ((uint16_t)0x8000)            /*!‹Software Reset */

/*******************  Bit definition for I2C_CR2 register  ********************/
#define  I2C_CR2_FREQ                        ((uint16_t)0x003F)            /*!‹FREQ[5:0] bits (Peripheral Clock Frequency) */
#define  I2C_CR2_FREQ_0                      ((uint16_t)0x0001)            /*!‹Bit 0 */
#define  I2C_CR2_FREQ_1                      ((uint16_t)0x0002)            /*!‹Bit 1 */
#define  I2C_CR2_FREQ_2                      ((uint16_t)0x0004)            /*!‹Bit 2 */
#define  I2C_CR2_FREQ_3                      ((uint16_t)0x0008)            /*!‹Bit 3 */
#define  I2C_CR2_FREQ_4                      ((uint16_t)0x0010)            /*!‹Bit 4 */
#define  I2C_CR2_FREQ_5                      ((uint16_t)0x0020)            /*!‹Bit 5 */

#define  I2C_CR2_ITERREN                     ((uint16_t)0x0100)            /*!‹Error Interrupt Enable */
#define  I2C_CR2_ITEVTEN                     ((uint16_t)0x0200)            /*!‹Event Interrupt Enable */
#define  I2C_CR2_ITBUFEN                     ((uint16_t)0x0400)            /*!‹Buffer Interrupt Enable */
#define  I2C_CR2_DMAEN                       ((uint16_t)0x0800)            /*!‹DMA Requests Enable */
#define  I2C_CR2_LAST                        ((uint16_t)0x1000)            /*!‹DMA Last Transfer */

/*******************  Bit definition for I2C_OAR1 register  *******************/
#define  I2C_OAR1_ADD1_7                     ((uint16_t)0x00FE)            /*!‹Interface Address */
#define  I2C_OAR1_ADD8_9                     ((uint16_t)0x0300)            /*!‹Interface Address */

#define  I2C_OAR1_ADD0                       ((uint16_t)0x0001)            /*!‹Bit 0 */
#define  I2C_OAR1_ADD1                       ((uint16_t)0x0002)            /*!‹Bit 1 */
#define  I2C_OAR1_ADD2                       ((uint16_t)0x0004)            /*!‹Bit 2 */
#define  I2C_OAR1_ADD3                       ((uint16_t)0x0008)            /*!‹Bit 3 */
#define  I2C_OAR1_ADD4                       ((uint16_t)0x0010)            /*!‹Bit 4 */
#define  I2C_OAR1_ADD5                       ((uint16_t)0x0020)            /*!‹Bit 5 */
#define  I2C_OAR1_ADD6                       ((uint16_t)0x0040)            /*!‹Bit 6 */
#define  I2C_OAR1_ADD7                       ((uint16_t)0x0080)            /*!‹Bit 7 */
#define  I2C_OAR1_ADD8                       ((uint16_t)0x0100)            /*!‹Bit 8 */
#define  I2C_OAR1_ADD9                       ((uint16_t)0x0200)            /*!‹Bit 9 */

#define  I2C_OAR1_ADDMODE                    ((uint16_t)0x8000)            /*!‹Addressing Mode (Slave mode) */

/*******************  Bit definition for I2C_OAR2 register  *******************/
#define  I2C_OAR2_ENDUAL                     ((uint8_t)0x01)               /*!‹Dual addressing mode enable */
#define  I2C_OAR2_ADD2                       ((uint8_t)0xFE)               /*!‹Interface address */

/********************  Bit definition for I2C_DR register  ********************/
#define  I2C_DR_DR                           ((uint8_t)0xFF)               /*!‹8-bit Data Register */

/*******************  Bit definition for I2C_SR1 register  ********************/
#define  I2C_SR1_SB                          ((uint16_t)0x0001)            /*!‹Start Bit (Master mode) */
#define  I2C_SR1_ADDR                        ((uint16_t)0x0002)            /*!‹Address sent (master mode)/matched (slave mode) */
#define  I2C_SR1_BTF                         ((uint16_t)0x0004)            /*!‹Byte Transfer Finished */
#define  I2C_SR1_ADD10                       ((uint16_t)0x0008)            /*!‹10-bit header sent (Master mode) */
#define  I2C_SR1_STOPF                       ((uint16_t)0x0010)            /*!‹Stop detection (Slave mode) */
#define  I2C_SR1_RXNE                        ((uint16_t)0x0040)            /*!‹Data Register not Empty (receivers) */
#define  I2C_SR1_TXE                         ((uint16_t)0x0080)            /*!‹Data Register Empty (transmitters) */
#define  I2C_SR1_BERR                        ((uint16_t)0x0100)            /*!‹Bus Error */
#define  I2C_SR1_ARLO                        ((uint16_t)0x0200)            /*!‹Arbitration Lost (master mode) */
#define  I2C_SR1_AF                          ((uint16_t)0x0400)            /*!‹Acknowledge Failure */
#define  I2C_SR1_OVR                         ((uint16_t)0x0800)            /*!‹Overrun/Underrun */
#define  I2C_SR1_PECERR                      ((uint16_t)0x1000)            /*!‹PEC Error in reception */
#define  I2C_SR1_TIMEOUT                     ((uint16_t)0x4000)            /*!‹Timeout or Tlow Error */
#define  I2C_SR1_SMBALERT                    ((uint16_t)0x8000)            /*!‹SMBus Alert */

/*******************  Bit definition for I2C_SR2 register  ********************/
#define  I2C_SR2_MSL                         ((uint16_t)0x0001)            /*!‹Master/Slave */
#define  I2C_SR2_BUSY                        ((uint16_t)0x0002)            /*!‹Bus Busy */
#define  I2C_SR2_TRA                         ((uint16_t)0x0004)            /*!‹Transmitter/Receiver */
#define  I2C_SR2_GENCALL                     ((uint16_t)0x0010)            /*!‹General Call Address (Slave mode) */
#define  I2C_SR2_SMBDEFAULT                  ((uint16_t)0x0020)            /*!‹SMBus Device Default Address (Slave mode) */
#define  I2C_SR2_SMBHOST                     ((uint16_t)0x0040)            /*!‹SMBus Host Header (Slave mode) */
#define  I2C_SR2_DUALF                       ((uint16_t)0x0080)            /*!‹Dual Flag (Slave mode) */
#define  I2C_SR2_PEC                         ((uint16_t)0xFF00)            /*!‹Packet Error Checking Register */

/*******************  Bit definition for I2C_CCR register  ********************/
#define  I2C_CCR_CCR                         ((uint16_t)0x0FFF)            /*!‹Clock Control Register in Fast/Standard mode (Master mode) */
#define  I2C_CCR_DUTY                        ((uint16_t)0x4000)            /*!‹Fast Mode Duty Cycle */
#define  I2C_CCR_FS                          ((uint16_t)0x8000)            /*!‹I2C Master Mode Selection */

/******************  Bit definition for I2C_TRISE register  *******************/
#define  I2C_TRISE_TRISE                     ((uint8_t)0x3F)               /*!‹Maximum Rise Time in Fast/Standard mode (Master mode) */
Реклама:
__________________
Осторожно , злой кот
dosikus вне форума  
Непрочитано 27.01.2011, 01:41  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию

Смотрим по функции инициализации в какой регистр/бит что записывается .
И переписываем без либ .
Обрати внимание на имена регистров/битов .
Модуль_регистр_бит.
Весьма удобно .

Сообщение от gromovi Посмотреть сообщение
не хочу юзать кейловские библиотеки. хочу чтоб сам все ручками
Язык опрежает мозг , дочитай сначала ...
__________________
Осторожно , злой кот

Последний раз редактировалось dosikus; 27.01.2011 в 01:50.
dosikus вне форума  
Непрочитано 27.01.2011, 01:48  
st_1
Заблокирован
 
Регистрация: 26.12.2009
Сообщений: 3,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
st_1 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от gromovi Посмотреть сообщение
не хочу юзать кейловские библиотеки. хочу чтоб сам все ручками по даташиту.
Дык... от чего-то отталкиваться то нужно, даташиты не мечта пикомана, а в библах можно нарыть понимание что к чему, а потом уже ручками и ножками по даташиту. Просто надо привыкнуть к новому камню с другой архитектурой.
st_1 вне форума  
Сказали "Спасибо" st_1
dosikus (27.01.2011)
Непрочитано 27.01.2011, 01:50  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

st_1, Как всегда прав...

Стас , ну чего как всегда ?
Лапками помахали , теперь SPI с Ls020 ...
__________________
Осторожно , злой кот

Последний раз редактировалось dosikus; 27.01.2011 в 01:54.
dosikus вне форума  
Непрочитано 27.01.2011, 02:03  
st_1
Заблокирован
 
Регистрация: 26.12.2009
Сообщений: 3,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
st_1 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от dosikus Посмотреть сообщение
Стас , ну чего как всегда ?
Лапками помахали , теперь SPI с Ls020 ...
Эта святое.

SPI ещё никто не отменял.
st_1 вне форума  
Непрочитано 27.01.2011, 04:36  
Murka-MakMur
Вид на жительство
 
Аватар для Murka-MakMur
 
Регистрация: 05.09.2007
Адрес: Новороссия ЛНР Рубежное -> РФ Калуга
Сообщений: 363
Сказал спасибо: 10
Сказали Спасибо 74 раз(а) в 59 сообщении(ях)
Murka-MakMur на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Вот типа документашка по Cortex_ам с www.gaw.ru
__________________
Политика России будет выглядеть неоднозначной до тех пор, пока не будет решен исход битвы.
Чем больше слёз тем больше облегчения, в слезах и заключается лечение.
Не зли меня
Murka-MakMur вне форума  
Эти 4 пользователя(ей) сказали Спасибо Murka-MakMur за это сообщение:
a-fisher (16.02.2011), gromovi (27.01.2011), serg_42 (26.06.2014), tedal (30.10.2013)
Непрочитано 27.01.2011, 09:57  
ut1wpr
Почётный гражданин KAZUS.RUN
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,613
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от Serega_B Посмотреть сообщение
НЕ ТАК!
Ну нет там такого глюка! Иначе я бы уже три раза повесился, передергивая питание у целевого контроллера (STM32F103RB). Специально заказал халявный Дисковери32 для того чтобы проверить, но он пока не приехал. Пользуюсь Дисковери, купленным в DIgi-Key_е 9/30/2010 5:14:09 AM. Т.е. если бы там был глюк - он еще не устранен. Из ПО стоИт IAR 6.10.1.
Спасибо. Не могу вам не верить. Я вчера созвонился с коллегой из Минска, у него тоже (вроде) глюков не обнаружено. Кейл 4.14 у него. Однако он все делал в режиме дебаггинга и сегодня попробует простую загрузку. Раздобуду 4.14 и тоже потренируюсь во всех режимах. На всякий случай заказал еще один комплект, т.к. у коллеги более свежая версия firmvare на лейбачке с обратной стороны ПП написана. У меня M8913-C00. Хотя, как вы говорите, "возраст" не имеет значения... Подожду, если придет второй, проверю еще раз. У меня одинаковое поведение и под ИАР и под Кейл.
ut1wpr вне форума  
Непрочитано 27.01.2011, 10:26  
Loole
Вид на жительство
 
Регистрация: 11.05.2005
Адрес: Питер
Сообщений: 425
Сказал спасибо: 47
Сказали Спасибо 72 раз(а) в 59 сообщении(ях)
Loole на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

На самом деле на наклейке написано MB913-С00. Неадекватное поведение Дискавери описано в самом начале ветки про халяву и не устранено до сих пор. Проверяем здесь обновления линка.
Loole вне форума  
Сказали "Спасибо" Loole
ut1wpr (27.01.2011)
Непрочитано 27.01.2011, 11:18  
Serega_B
Прописка
 
Регистрация: 09.11.2010
Сообщений: 102
Сказал спасибо: 4
Сказали Спасибо 28 раз(а) в 22 сообщении(ях)
Serega_B на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от ut1wpr Посмотреть сообщение
у коллеги более свежая версия firmvare на лейбачке с обратной стороны ПП написана. У меня M8913-C00.
О-о-о, вечером обязательно посмотрю и отпишу.

Еще вспомнил, что на Электрониксе в папке с IAR для STM8 лежит какой-то апдейт для ST-Link. Только я на Дисковери32 его точно не ставил. Про Дисковери8 точно не скажу, не помню.
Serega_B вне форума  
Непрочитано 27.01.2011, 11:49  
PavelV
Прохожий
 
Регистрация: 18.02.2007
Сообщений: 4
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
PavelV на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Изучил вопрос подробнее, прошивку все-таки можно стартовать без передергивания питания. Но это надо делать вручную - для ST-Link Utility надо перейти в меню Target › MCU Core и нажать кнопку Run. Почему-то нельзя настроить автоматический запуск.

Статью свою дополнил.
PavelV вне форума  
 
Опции темы

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

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, время: 00:09.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.