27.01.2011, 01:39
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
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) */ |
__________________
Осторожно , злой кот
|
|
|
|
27.01.2011, 01:41
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Смотрим по функции инициализации в какой регистр/бит что записывается .
И переписываем без либ .
Обрати внимание на имена регистров/битов .
Модуль_регистр_бит.
Весьма удобно .
Сообщение от gromovi
|
не хочу юзать кейловские библиотеки. хочу чтоб сам все ручками
|
Язык опрежает мозг , дочитай сначала ...
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 27.01.2011 в 01:50.
|
|
|
|
27.01.2011, 01:48
|
|
Заблокирован
Регистрация: 26.12.2009
Сообщений: 3,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от gromovi
|
не хочу юзать кейловские библиотеки. хочу чтоб сам все ручками по даташиту.
|
Дык... от чего-то отталкиваться то нужно, даташиты не мечта пикомана, а в библах можно нарыть понимание что к чему, а потом уже ручками и ножками по даташиту. Просто надо привыкнуть к новому камню с другой архитектурой.
|
|
|
|
27.01.2011, 01:50
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
st_1, Как всегда прав...
Стас , ну чего как всегда ?
Лапками помахали , теперь SPI с Ls020 ...
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 27.01.2011 в 01:54.
|
|
|
|
27.01.2011, 02:03
|
|
Заблокирован
Регистрация: 26.12.2009
Сообщений: 3,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
|
|
|
|
27.01.2011, 04:36
|
|
Вид на жительство
Регистрация: 05.09.2007
Адрес: Новороссия ЛНР Рубежное -> РФ Калуга
Сообщений: 360
Сказал спасибо: 10
Сказали Спасибо 73 раз(а) в 58 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Вот типа документашка по Cortex_ам с www.gaw.ru
__________________
Политика России будет выглядеть неоднозначной до тех пор, пока не будет решен исход битвы.
Чем больше слёз тем больше облегчения, в слезах и заключается лечение.
Не зли меня
|
|
|
Эти 4 пользователя(ей) сказали Спасибо Murka-MakMur за это сообщение:
|
|
|
27.01.2011, 09:57
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
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. Хотя, как вы говорите, "возраст" не имеет значения... Подожду, если придет второй, проверю еще раз. У меня одинаковое поведение и под ИАР и под Кейл.
|
|
|
|
27.01.2011, 10:26
|
|
Вид на жительство
Регистрация: 11.05.2005
Адрес: Питер
Сообщений: 425
Сказал спасибо: 47
Сказали Спасибо 72 раз(а) в 59 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
На самом деле на наклейке написано MB913-С00. Неадекватное поведение Дискавери описано в самом начале ветки про халяву и не устранено до сих пор. Проверяем здесь обновления линка.
|
|
|
|
27.01.2011, 11:18
|
|
Прописка
Регистрация: 09.11.2010
Сообщений: 102
Сказал спасибо: 4
Сказали Спасибо 28 раз(а) в 22 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от ut1wpr
|
у коллеги более свежая версия firmvare на лейбачке с обратной стороны ПП написана. У меня M8913-C00.
|
О-о-о, вечером обязательно посмотрю и отпишу.
Еще вспомнил, что на Электрониксе в папке с IAR для STM8 лежит какой-то апдейт для ST-Link. Только я на Дисковери32 его точно не ставил. Про Дисковери8 точно не скажу, не помню.
|
|
|
|
27.01.2011, 11:49
|
|
Прохожий
Регистрация: 18.02.2007
Сообщений: 4
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Изучил вопрос подробнее, прошивку все-таки можно стартовать без передергивания питания. Но это надо делать вручную - для ST-Link Utility надо перейти в меню Target › MCU Core и нажать кнопку Run. Почему-то нельзя настроить автоматический запуск.
Статью свою дополнил.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:12.
|
|