Да, и в I2C не силен. Можно ли ему выставить частоту 1000 герц работы? Я выставлял, фронты тогда красивые, даже что-то передается. Но общался между двумя STM микроконтроллерами. Непонятно можно ли с другой периферией общаться на такой низкой частоте.
I²C и STM32L
Тут пытаюсь прикрутить I2C к STM32L - капризная однако вещь. На частоте 100 кгц с внутренним pull-up резистором сигнал такой, что даже 3 V не успевает получиться. Провода у меня примерно по 10 см между устройствами. Можно поставить внешние 4.7 ком резисторы, но что-то как подумаю, что тогда при общении по I2C ток потребления будет больше, чем всего устройства, так сразу не хочется так делать. Может ну его нафиг i2C? SPI rules forever?
Да, и в I2C не силен. Можно ли ему выставить частоту 1000 герц работы? Я выставлял, фронты тогда красивые, даже что-то передается. Но общался между двумя STM микроконтроллерами. Непонятно можно ли с другой периферией общаться на такой низкой частоте.
Да, и в I2C не силен. Можно ли ему выставить частоту 1000 герц работы? Я выставлял, фронты тогда красивые, даже что-то передается. Но общался между двумя STM микроконтроллерами. Непонятно можно ли с другой периферией общаться на такой низкой частоте.
- Реклама
- Сообщения: 3793
- Зарегистрирован: Ср дек 24, 2008 09:58:58
С внутренними pull-up резисторами хороших фронтов не получится, ставьте внешние на 4.7к. На частоте 100 кгц ток через них будет идти несколько мсек и на среднее токопотребление это влияет незначительно, если передача данных небольшая и не частая. Если бутете работать на 1000 гц (что возможно), то ток через внутренние резисторы будет раз в 10-100 меньше, зато длительность импульса будет в 100 раз большей и выигрыша никакого не получится.
Переделал схемку на SPI протокол, потому как он попроще. Все равно не работает.

Вот сижу, думаю в чем накосячил. Вроде сжечь не мог. Перепаивал уже несколько раз. Даже научился тестировать, что припаял правильно. А все равно не работает. Сигнал вроде на всех ножках такой как надо, но в ответ ничего не выдает эта микросхемка
В аттаче приложил схему и код.
Соединяю так с STM32F107
SCL - PA5
SDI - PA7
SDO - PA6
CS - PA2
Может у меня какая дурная ошибка, какой не вижу?
Вот сижу, думаю в чем накосячил. Вроде сжечь не мог. Перепаивал уже несколько раз. Даже научился тестировать, что припаял правильно. А все равно не работает. Сигнал вроде на всех ножках такой как надо, но в ответ ничего не выдает эта микросхемка
В аттаче приложил схему и код.
Соединяю так с STM32F107
SCL - PA5
SDI - PA7
SDO - PA6
CS - PA2
Может у меня какая дурная ошибка, какой не вижу?
- Вложения
-
- spi_test.c
- Тестовая програмка
- (2.44 КБ) 349 скачиваний
-
- pressure.pdf
- Мелкосхемка
- (52.48 КБ) 216 скачиваний
полюбому надо вот так порты инициализировать:balmer писал(а):Сигнал вроде на всех ножках такой как надо, но в ответ ничего не выдает эта микросхемка![]()
Код: Выделить всё
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_6 | GPIO_Pin_5;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);//spi
GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);//spi
GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);//spi
Код: Выделить всё
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
SPI_InitTypeDef SPI_InitStruct1;
SPI_InitStruct1.SPI_Direction = SPI_Direction_2Lines_FullDuplex ;
SPI_InitStruct1.SPI_Mode = SPI_Mode_Master;
SPI_InitStruct1.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStruct1.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStruct1.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStruct1.SPI_NSS = SPI_NSS_Soft;
SPI_InitStruct1.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
SPI_InitStruct1.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStruct1.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &SPI_InitStruct1);
SPI_CalculateCRC(SPI1,DISABLE);
SPI_Cmd(SPI1, ENABLE);
Код: Выделить всё
inline int spiLoopByte(uint8_t data)
{
uint8_t RxData = 0;
while( ! (SPI1->SR & SPI_SR_TXE ) ) ;
SPI1->DR = data ;
while( ! (SPI1->SR & SPI_SR_RXNE) );
data = SPI1->DR; // read rx buf
return (data);
}Информация по RLC mini находится >тут<
Это для других микроконтроллеров. Твой код подойдет для STM32L и STM32F4.Neekeetos писал(а): полюбому надо вот так порты инициализировать:Код: Выделить всё
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_6 | GPIO_Pin_5; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);//spi GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);//spi GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);//spi
Полярносить там по даташиту high.
- Реклама
Это рабочий код из проекта на 32l151, у тебя в названии темы указано 32L. Инициализацию spi понятное дело надо подгонять под себя, там кроме полярности еще например частота работы другая.balmer писал(а):Это для других микроконтроллеров. Твой код подойдет для STM32L и STM32F4.
Полярносить там по даташиту high.
Информация по RLC mini находится >тут<


