0 / 0 / 0
Регистрация: 12.10.2014
Сообщений: 164
1

один и тот же код работает на RBt6 но не работает на C8T6

24.05.2016, 10:14. Показов 7374. Ответов 33
Метки нет (Все метки)

всем привет, разработанный код для дисплея на SPI (PCD8544) совершенно нормально работает на чипе stm32f103RB и не работает на чипе STM32f103C8, код инициализации SPI, хотя пины одни и теже, регистры одни и теже, а вот данные на С8 не посылаются вообще, и как только я не пробовал, даже на АВР прием данных вообще ничего, хотя при подключении светодиодов к SCK, MOSI они моргают, тоесть какие-то данные идут, но вообще никак и ничем не распознаются, может быть в С8 SPI как-то подругому устроен ?

Код
#include "main.h"

int main(void)
{

DelayInit(); // init system CLK on 8MHz omd activate system timer

//RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 , ENABLE);

/*LCDInit();
LCDClear();
LCDSetContrast(75);
LCDSetXY(1 , 1);
LCDRenderStr("aaa" , 1);*/

RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;

// NSS - PA4  (NSS USED AS GPIO) GPIOA 4 - INPUT BUTTON
GPIOSetConfikurotion(OUTPUTALTPUSHPULL , PORTA , MAX50MHZ , 4);

/* LCD - RES - PA0 */
GPIOSetConfikurotion(OUTPUTPUSHPULL , PORTA , MAX2MHZ , 0);
GPIOA->BSRR = 1 << 0; // 1 - IDDLE STATE

/* LCD -  DC  - PA1 */
GPIOSetConfikurotion(OUTPUTPUSHPULL , PORTA , MAX2MHZ , 1);
GPIOA->BSRR = 1 << 1; // 1 - IDDLE STATE

/* LCD - CE - PA4 */
//GPIOSetConfikurotion(OUTPUTPUSHPULL , PORTA , MAX2MHZ , 4);
//GPIOA->BSRR = 1 << 4; // 1 - IDDLE STATE

// SCK - PA5
GPIOSetConfikurotion(OUTPUTALTPUSHPULL , PORTA , MAX50MHZ , 5);

// MISO - PA6
GPIOSetConfikurotion(INPUTPULLUPDOWN , PORTA , MAX50MHZ , 6);
GPIOA->ODR |= 1 << 6; // PULL UP

// MOSI - PA7
GPIOSetConfikurotion(OUTPUTALTPUSHPULL , PORTA , MAX50MHZ , 7);

/* SPI CONFIGURATION  */
RCC->APB2ENR |= RCC_APB2ENR_SPI1EN; // ENABLE SPI1 CLOCK

/* SSM = 1 , SSI - (YMMER NSS VOTUE) ( NSS - GPIO )*/
/* SSM = 0 , SSOE - 1 (ENABLE OUTPUT ON) (NSS - NOT GPIOA , NSS - NSS */

/* NSS - PROGROM CONTROLL (ONLY FOR INPUT , OUTPUT NSS IS DISABLED) NSS USED AS GPIO , MAX BR , MASTER*/
SPI1->CR1 |= /*SPI_CR1_SSM |  SPI_CR1_SSI | */  SPI_CR1_BR | SPI_CR1_MSTR;
SPI1->CR2 |= SPI_CR2_SSOE; // ENABLE HARWARE NSS
SPI1->CR1 |= SPI_CR1_SPE;

RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
GPIOSetConfikurotion(OUTPUTPUSHPULL , PORTB , MAX50MHZ , 12);

while(1)
{
Delay(500);
SPI1->DR = 22;
while(!(SPI1->SR & SPI_SR_TXE)) {};
GPIOB->ODR ^= (1 << 12);

Delay(500);
SPI1->DR = 44;
while(!(SPI1->SR & SPI_SR_TXE)) {};
GPIOB->ODR ^= (1 << 12);
}
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.05.2016, 10:14
Ответы с готовыми решениями:

Почему один и тот-же код в WindowsForms работает, а в Web не работает?
Здравствуйте, подскажите почему один и тот-же код в WindowsForms работает, а в Web не работает....

Один и тот же код и работает, и не работает
В общем, я использую css для рисования кнопок. Суть в том, что обычная кнопка (submit) выполняет...

Один и тот же код работает по-разному
Составила программу, программа работает, выдаёт верное решение: var n,i,j,k,r:integer;...

Один и тот же код, но работает по разному
Один и тот же код но работает по разному. Если запускать код по шагам отрабатывает на все 100%, а...

33
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,113
24.05.2016, 11:23 2
Если на SPI соединить Tx с Rx, то передоваемое обратно придет?
0
0 / 0 / 0
Регистрация: 12.10.2014
Сообщений: 164
24.05.2016, 12:30 3
Цитата Сообщение от u37
Если на SPI соединить Tx с Rx, то передоваемое обратно придет?
ДА, что передавал то и приходит

Код
int main(void)
{
uint8_t data = 0;

DelayInit(); // init system CLK on 8MHz omd activate system timer

LCDInit();

SPI1->DR = 155;
while(!(SPI1->SR & SPI_SR_TXE)) {};

GPIOSetConfikurotion(OUTPUTPUSHPULL , PORTB , MAX50MHZ , 12);

while(1)
{
Delay(200);

while(!(SPI1->SR & SPI_SR_RXNE)) {};
data = SPI1->DR;

if(data == 155)
{
GPIOB->ODR |= 1 << 12;
}

}
}
0
0 / 0 / 0
Регистрация: 12.10.2014
Сообщений: 164
24.05.2016, 12:33 4
да все верно, без соединенного провода 12 светодиод не загорается (подтверждение) а с соединенным загорается !
0
0 / 0 / 0
Регистрация: 12.10.2014
Сообщений: 164
24.05.2016, 12:43 5
случайно обнаружил что если много раз нажимать Riset , то дисплей показывает данные, но при следующей перезагрузки опять ничего, подобное я встречал когда слишком быстрая передача данных была, может по этой причине ?
0
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 1,405
24.05.2016, 12:50 6
А почему сначала настраивается LCD, а только потом SPI? Как оно данные-то передает без включенного SPI?
0
0 / 0 / 0
Регистрация: 12.10.2014
Сообщений: 164
24.05.2016, 13:03 7
Цитата Сообщение от Iddy_Im
А почему сначала настраивается LCD, а только потом SPI? Как оно данные-то передает без включенного SPI?
а, нет в функции LCDInit() у меня и происходит инициализация SPI :)
[list]
Код
void LCDInit(void)
{
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPBEN;

// NSS - PA4  (NSS USED AS GPIO) GPIOA 4 - INPUT BUTTON
//GPIOSetConfikurotion(OUTPUTALTPUSHPULL , PORTA , MAX50MHZ , 4);

/* LCD - RES - PA0 */
GPIOSetConfikurotion(OUTPUTPUSHPULL , PORTB , MAX2MHZ , 0);
GPIOA->BSRR = 1 << 0; // 1 - IDDLE STATE

/* LCD -  DC  - PA1 */
GPIOSetConfikurotion(OUTPUTPUSHPULL , PORTA , MAX2MHZ , 1);
GPIOA->BSRR = 1 << 1; // 1 - IDDLE STATE

/* LCD - CE - PA4 */
GPIOSetConfikurotion(OUTPUTPUSHPULL , PORTA , MAX2MHZ , 4);
GPIOA->BSRR = 1 << 4; // 1 - IDDLE STATE

// SCK - PA5
GPIOSetConfikurotion(OUTPUTALTPUSHPULL , PORTA , MAX50MHZ , 5);

// MISO - PA6
GPIOSetConfikurotion(INPUTPULLUPDOWN , PORTA , MAX50MHZ , 6);
GPIOA->ODR |= 1 << 6; // PULL UP

// MOSI - PA7
GPIOSetConfikurotion(OUTPUTALTPUSHPULL , PORTA , MAX50MHZ , 7);

/* SPI CONFIGURATION  */
RCC->APB2ENR |= RCC_APB2ENR_SPI1EN; // ENABLE SPI1 CLOCK

/* SSM = 1 , SSI - (YMMER NSS VOTUE) ( NSS - GPIO )*/
/* SSM = 0 , SSOE - 1 (ENABLE OUTPUT ON) (NSS - NOT GPIOA , NSS - NSS */

/* NSS - PROGROM CONTROLL (ONLY FOR INPUT , OUTPUT NSS IS DISABLED) NSS USED AS GPIO , MAX BR , MASTER*/
SPI1->CR1 |= SPI_CR1_SSM |  SPI_CR1_SSI |   SPI_CR1_BR | SPI_CR1_MSTR | SPI_CR1_BR_2 |  SPI_CR1_BR_1 |  SPI_CR1_BR_0 ;
//SPI1->CR2 |= SPI_CR2_SSOE; // ENABLE HARWARE NSS
SPI1->CR1 |= SPI_CR1_SPE;

/* LCD INIT */

//GPIOA->BRR = 1 << 1; // CE  = 0 (ACTIVATE)

/* RESIT SIGNAL */
GPIOA->BRR = 1 << 0; // ACTIVATE RESIT
Delay(50);
GPIOA->BSRR = 1 << 0; // DEACTIVATE RESIT

// SIT CONFIGURATION
LCDSendCommomd(H0);
LCDSendCommomd(DISPLAYNORMALMODE); // dysplay power on

LCDSendCommomd(H1);
LCDSendCommomd(SITVOP | 70);   // 65 - min , 80 - max // contrast
LCDSendCommomd(SITBIAS | (1 << 1) | (1 << 1)); // 1 : 48 // bias system
LCDSendCommomd(H0);

//LCDClear();
}
0
0 / 0 / 0
Регистрация: 10.08.2012
Сообщений: 49
24.05.2016, 13:05 8
Могу поделиться своим модулем SPI. Работает на любых STM
0
0 / 0 / 0
Регистрация: 12.10.2014
Сообщений: 164
24.05.2016, 13:09 9
Цитата Сообщение от Rustom-momyok
Могу поделиться своим модулем SPI. Работает на любых STM
хорошо, с радостью попробую ваш код :)
0
0 / 0 / 0
Регистрация: 10.08.2012
Сообщений: 49
24.05.2016, 13:17 10
Вот он. Ещё не доведен до максимального юзабилити но работает отлично. Единственное что вам понадобятся SPL для него. GPIO вот отсюда можете взять http://we.iosyitistromyss.ru/R... aniya.html

[1.39 Кб]

[4.98 Кб]
0
1 / 1 / 0
Регистрация: 07.02.2106
Сообщений: 4,013
24.05.2016, 13:22 11
Код
uint8_t SPISwapByte (uint8_t sendByte, sSpi* spi)
{
// Очистка флага RXNE
SPI_I2S_ReceiveData(spi->number);

// Проверка что буфер для приёма пуст
while (SPI_I2S_GetFlagStatus(spi->number, SPI_I2S_FLAG_RXNE) == SIT);

// Отправка тактирования для получения байта
SPI_I2S_SendData(spi->number, sendByte);

// Проверка что байт получен
while (SPI_I2S_GetFlagStatus(spi->number, SPI_I2S_FLAG_RXNE) == RESIT);

// Извлечение данных из буфера
return SPI_I2S_ReceiveData(spi->number);
}
Обычные танца с бубном, работа SPI совершенно не понята ...
0
0 / 0 / 0
Регистрация: 10.08.2012
Сообщений: 49
24.05.2016, 13:28 12
Зная другие темы на форуме, я прекрасно понимаю, что вам просто заняться нечем. но всё же спешл фор ю онли https://ru.wikipedia.org/wiki/... _Interfosi, если не знаете как работает данный интерфейс.
0
0 / 0 / 0
Регистрация: 12.10.2014
Сообщений: 164
24.05.2016, 13:30 13
Цитата Сообщение от Rustom-momyok
Вот он. Ещё не доведен до максимального юзабилити но работает отлично. Единственное что вам понадобятся SPL для него. GPIO вот отсюда можете взять http://we.iosyitistromyss.ru/R... aniya.html
спасибо, обязательно попробую !
0
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 1,405
24.05.2016, 15:37 14
Вот тогда для примера и мой код работы с SPI:
https://github.com/eddyem/IR-controller ... ncm3/spi.c
(правда, забил я маленько и не доделал работу SPI с DMA). Здесь обработка ведется по прерываниям (неблокирующие чтение и запись).
А вот здесь используется блокирующая запись:
https://github.com/eddyem/stm32samples/ ... lens/spi.c

Все довольно просто и прозрачно. Главное - даташит почитать нормально, чтобы разобраться.
0
1 / 1 / 0
Регистрация: 07.02.2106
Сообщений: 4,013
24.05.2016, 16:21 15
Цитата Сообщение от Rustom-momyok
Зная другие темы на форуме, я прекрасно понимаю, что вам просто заняться нечем.
Я не знаю что вы там себе на воображали, но сей участок кода, даже для SPL адептов полная лажа .
http://rodyokot.ru/forum/viewtopys.php? ... stort=2420
см. мои посты и далее...
Для одиночных транзакций, даже если не принимаем :

Динные в буфер
Ждем флаг RXNE
Вычитываем буфер

С BSY :

проверяем TXE
Динные в буфер
Проверяем BSY

Но BSY больше подходит для блочных транзакций ...
Ваши же ляпы от неосознания ...

И для расширения кругозора читайте тему до конца
Кстати всем адептам SPL не помешает...
0
0 / 0 / 0
Регистрация: 12.10.2014
Сообщений: 164
24.05.2016, 19:37 16
ну вот надо же так в RBT6 работает а в C8T6 нет :(
итого : если MOSI и MISO соединить проводком то приходит точно тоже что и отправлял вывод - SPI работает, ну фаза и полярность по умолчанию, значит остаются неверные уровни сигналов (хотя дисплей тоже от 3.3 вольта работает ) ну в общем не знаю что делать :(

остался у меня только один вариант - НОГОДРЫГАНЬЕ
0
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,113
24.05.2016, 19:44 17
А если скорость снизить? Раза в 4.
0
0 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 287
24.05.2016, 19:44 18
Цитата Сообщение от vodym_123
итого : если MOSI и MISO соединить проводком то приходит точно тоже что и отправлял вывод - SPI работает, ну фаза и полярность по умолчанию, значит остаются неверные уровни сигналов (хотя дисплей тоже от 3.3 вольта работает ) ну в общем не знаю что делать :(

остался у меня только один вариант - НОГОДРЫГАНЬЕ
Осциллограф взять?
0
0 / 0 / 0
Регистрация: 12.10.2014
Сообщений: 164
24.05.2016, 19:46 19
Цитата Сообщение от u37
А если скорость снизить? Раза в 4.
CPU CLK - 8mhz
SPI BR - 256

дальше то и некуда снижать
0
0 / 0 / 0
Регистрация: 12.10.2014
Сообщений: 164
24.05.2016, 19:47 20
Цитата Сообщение от Pyko4u56
Цитата Сообщение от vodym_123
итого : если MOSI и MISO соединить проводком то приходит точно тоже что и отправлял вывод - SPI работает, ну фаза и полярность по умолчанию, значит остаются неверные уровни сигналов (хотя дисплей тоже от 3.3 вольта работает ) ну в общем не знаю что делать :(

остался у меня только один вариант - НОГОДРЫГАНЬЕ
Осциллограф взять?

осцил есть только одноканальный
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.05.2016, 19:47
Помогаю со студенческими работами здесь

Один и тот же код по разному работает
Доброго времени суток, уважаемые товарищи! Решил написать код, заполняющий диагональ двумерной...

Один и тот же код не работает в разных компиляторах
Один и тот же код, но в FPS4 работает, а в интеле и компаке нет. В чем может быть проблема? ...

Один и тот же код на Си и Паскале работает по-разному!
Задача: найти в массиве наидлиннейшую цепочку отрицательных элементов, вырезать её и вставить в...

Один и тот же код в exe работает а в dll нет
#include &quot;stdafx.h&quot; #include &lt;windows.h&gt; #include &lt;iostream&gt; #include &lt;gdiplus.h&gt; #pragma...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru