12.01.2013, 19:07
|
|
Вид на жительство
Регистрация: 26.07.2007
Сообщений: 483
Сказал спасибо: 18
Сказали Спасибо 107 раз(а) в 68 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
polyname, Если вас JTAG/SWD есть, то можете смотреть на живую что происходит в регистрах.С STM-ами пока I2C не использовал, но делал на NXP особых трудностей не было - все почти так-же как было с АВР-ами, думаю тут тоже все будет просто. тем более что есть DMA...Для начала надо очень внимательно прочитать сам протокол I2C - дальше просто.
|
|
|
|
12.01.2013, 19:18
|
|
Прописка
Регистрация: 19.05.2012
Сообщений: 99
Сказал спасибо: 0
Сказали Спасибо 10 раз(а) в 8 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от nerozero
|
Для начала надо очень внимательно прочитать сам протокол I2C
|
с протоколом как раз все ок - программный бит-бэнг работает без проблем.
с передачей вроде понятно - ACK попадает в I2C_SR1.AF.
как инициировать прием - хз. Может передать 0xFF ?
|
|
|
|
12.01.2013, 19:21
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от polyname
|
запускаю аппаратный I2C (пока без DMA и прерываний).
из примеров и документации непонятны несколько моментов:
- откуда брать бит ACK после I2C_SendData и ожидания I2C_EVENT_MASTER_BYTE_TRANSMITTED ?
- как программно принять несколько байт ? I2C_ReceiveData просто читает регистр приемника, как запустить прием - нигде не описано.
|
Код:
|
unsigned char I2C_Write_Byte (I2C_TypeDef* I2Cx, unsigned char i2c_address, unsigned char i2c_pointer, unsigned char data)
{
while(I2C_GetFlagStatus(I2Cx, I2C_FLAG_BUSY));
I2C_GenerateSTART (I2Cx, ENABLE);
while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_MODE_SELECT));
I2C_Send7bitAddress(I2Cx, i2c_address, I2C_Direction_Transmitter);
while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
I2C_SendData(I2Cx, i2c_pointer);
while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
I2C_SendData(I2Cx, data);
while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
I2C_GenerateSTOP(I2Cx, ENABLE);
return 0;
} |
Код:
|
unsigned char I2C_Read_Byte (I2C_TypeDef* I2Cx, unsigned char i2c_address, unsigned char i2c_pointer, unsigned char * data)
{
I2C_GenerateSTART (I2Cx, ENABLE); //START
while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_MODE_SELECT));
I2C_Send7bitAddress(I2Cx, i2c_address, I2C_Direction_Transmitter); //SEND ADDRESS
while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
I2C_SendData(I2Cx, i2c_pointer); //SEND POINTER
while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
I2C_GenerateSTART (I2Cx, ENABLE); //REPEAT START
while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_MODE_SELECT));
I2C_Send7bitAddress(I2Cx, i2c_address, I2C_Direction_Receiver); //SEND ADDRESS READ
while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_BYTE_RECEIVED));
*data=I2C_ReceiveData(I2Cx); //READ DATA
I2C_AcknowledgeConfig(I2Cx, DISABLE);
I2C_GenerateSTOP(I2Cx, ENABLE);
return 0;
} |
|
|
|
|
12.01.2013, 19:26
|
|
Гражданин KAZUS.RU
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от polyname
|
как инициировать прием - хз. Может передать 0xFF ?
|
Ничего передавать не надо, это же вам не spi.
Мастером передаётся адрес и бит направления передачи (R/W).
|
|
|
|
12.01.2013, 19:32
|
|
Прописка
Регистрация: 19.05.2012
Сообщений: 99
Сказал спасибо: 0
Сказали Спасибо 10 раз(а) в 8 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
то есть после передачи адреса с битом 0=1 приемник запускается автоматически ? оригинально...
Цитата:
|
I2C_Send7bitAddress(I2Cx, i2c_address, I2C_Direction_Receiver);
|
вот как тупо запустить прием байта и дождаться завершения (типа как в АВР while (!(TWCR & (1‹‹TWINT)))) ?
Последний раз редактировалось polyname; 12.01.2013 в 19:40.
|
|
|
|
12.01.2013, 19:34
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Надо будет попробовать на прерываниях отправку/прием сделать. Это интереснее. Флагов ждать не надо. Положил байт в буфер, он и пошел куда-то. Жалко таймер придется запользовать, чтобы бесконечности не ждать.
|
|
|
|
12.01.2013, 19:36
|
|
Прописка
Регистрация: 19.05.2012
Сообщений: 99
Сказал спасибо: 0
Сказали Спасибо 10 раз(а) в 8 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
тайм-аут вроде ловится автоматически - (TIMEOUT в I2C_SR1)
|
|
|
Сказали "Спасибо" polyname
|
|
|
12.01.2013, 19:38
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Не знал. Почитаю.
Цитата:
|
Note: This functionality is available only in SMBus mode.
|
Последний раз редактировалось Easyrider83; 12.01.2013 в 19:42.
|
|
|
|
13.01.2013, 04:47
|
|
Вид на жительство
Регистрация: 10.04.2010
Сообщений: 301
Сказал спасибо: 25
Сказали Спасибо 136 раз(а) в 79 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от С.М.С
|
Доброго времени суток! Взялся за STM32 и за основу решил сделать MP3 плеер на кодеке VS1011E. Купил МК STM32F103VBT6 думал 100 ног позарез хватит, но оказалось что и тут нет SDIO для SD. Вот вопрос есть ли смысл пробовать делать это программно, ещё МК будет управлять TFT через 24 битный RGB, хватит ли мощности или купить уже 144 ногий?
|
Как нет, у VЕТ6 есть! 100 ног тоже.
|
|
|
|
14.01.2013, 18:51
|
|
Прописка
Регистрация: 19.05.2012
Сообщений: 99
Сказал спасибо: 0
Сказали Спасибо 10 раз(а) в 8 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
в даташите на STM32F100Cx пишут что TIM4 у младших моделей отсутствует.
у меня на STM32F100C4 - работает.
ошибка или новая ревизия кристалла ?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 07:17.
|
|