Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.92/24: Рейтинг темы: голосов - 24, средняя оценка - 4.92
Dyzork
0 / 0 / 0
Регистрация: 09.11.2010
Сообщений: 47
1

Вопрос по SPI (а может и по C в Keil)

20.11.2012, 18:58. Просмотров 4366. Ответов 6
Метки нет (Все метки)

Есть вот такая функция чтения данных с флэш-памяти:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void FL_ReadData (uint32_t Address, uint32_t count, uint8_t* RxBuff)
{
uint32_t index = 0;
uint8_t ad0, ad1, ad2;
 
ad0 = Address & 0xff;
ad1 = (Address & 0xff00) >> 8;
ad2 = (Address & 0xff0000) >> 16;
 
GPIO_RisetByts (CS);                                // CS - задефайнено значение "GPIOA, GPIO_Pin_4"
SPI_I2S_SendData (SPII, 0x03);                 // SPII - задефайнено значение "SPI3"
while (!(SPI3->SR & SPI_SR_TXE));
SPI_I2S_SendData (SPII, ad0);
while (!(SPI3->SR & SPI_SR_TXE));
SPI_I2S_SendData (SPII, ad1);
while (!(SPI3->SR & SPI_SR_TXE));
SPI_I2S_SendData (SPII, ad2);
 
while (index < count)
{
SPI_I2S_SendData (SPII, 0x55);
while (!(SPI3->SR & SPI_SR_TXE));
RxBuff[index] = SPI_I2S_ReceiveData (SPII);
index++;
}
GPIO_SetByts (CS);
}
Соответственно в эту функцию сообщаются данные адреса, откуда начинать читать, сколько байт читать и куда сохранять.

Вот пример вызова функции из main
C
1
2
3
4
5
6
uint8_t RxBuffer[256];
 
int main()
{
FL_ReadData (0x00, 20, RxBuffer);
}

Соответственно должно считаться 20 байт начиная с адреса 0х00.
Если прогонять через отладку - и выполнять шаги функции по очереди в "ручном" режиме - все ок, все 20 байт считываются и сохраняются в массив RxBuffer.
Но если во время отладки на вызове функции FL_ReadData сделать Step, а не Step-Into, то считывается (или сохраняется в буфер) только первый байт.

Может кто-нибудь подскажет что-нибудь?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2012, 18:58
Ответы с готовыми решениями:

STM32F4-Discovery (Keil). Связь по USART и SPI
Доброго времени суток. Сразу скажу, что опыта в работе с МК не много и потому не бить сильно:) ...

Вопрос по Keil
Мне нужно, чтобы некоторые данные при компиляции записались в строго определенные адреса. Как...

Вопрос по среде keil
Можно ли как-то подключить в keil стандартные виндовые библиотеки, математические, к примеру? Не...

Вопрос по проекту в Keil 5
можно ли в Кейл отключить один файл из компиляции не удаляя его из проекта. В ИАР в опциях файла...

Вопрос знатокам. (Keil и IAR)
Всем привет. Есть в Кейле в настройках проекта параметр &quot;One ELF Section per Function&quot;. Есть ли...

6
dosykus_2
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 4,017
20.11.2012, 19:05 2
SPI_I2S_SendData покажите.
Если это функция из SPL где только данные кидаются в буфер, то вся работа с SPI неправильно написана.
Здесь на форуме уже несколько раз показывали как правильно работать...
0
Dyzork
0 / 0 / 0
Регистрация: 09.11.2010
Сообщений: 47
20.11.2012, 23:46 3
SPI_I2S_SendData - да, из SPL.
Поискал по форуму - нашел только, что перед каждой следующей отправкой идет задержка на проверку флага TXE.
Особой разницы между тем, как сделано у меня (while (!(SP3->SR & SPI_SR_TXE)); ) и проверкой флага через функцию SPL - SPI_I2S_GetFlagStatus я не увидел.
0
dosykus_2
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 4,017
21.11.2012, 00:16 4
Надо проверять RXNE и вычитывать после проверки буфер.
Приведенное вами от полного непонимания работы SPI...
0
Dyzork
0 / 0 / 0
Регистрация: 09.11.2010
Сообщений: 47
21.11.2012, 00:45 5
Да, не спорю, с SPI не дружу )

Проверять RXNE пробовал проверять... Ничего не изменялось. Пробовал проверять на BUSY - все тоже самое.
0
dosykus_2
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 4,017
21.11.2012, 00:51 6
Здесь смотрите
0
Dyzork
0 / 0 / 0
Регистрация: 09.11.2010
Сообщений: 47
21.11.2012, 00:58 7
спасибо.
0
21.11.2012, 00:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2012, 00:58

Вопрос по spi
Заметил, при работе с spi, что при передаче байта по spi, ответ генерируется в любом случае. То...

Вопрос по инициализации SPI
Доброго времени! Уже пару дней пытаюсь заставить работать SPI на STM32F030 и как то все...

SPI DMA вопрос
читаю даташит. Там в таблице каналов дма STEAM5 и STEAM7 это SPI3_TX. Могу ли я отправлять буфер...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru