реклама на сайте
подробности

 
 
> STM32F100 SPI no SCK
P4R4N014C
сообщение Apr 20 2014, 16:31
Сообщение #1





Группа: Участник
Сообщений: 13
Регистрация: 27-02-14
Пользователь №: 80 722



Здравствуйте. Пытаюсь связать LIS3DH и STM32F100 по SPI. Использую Software режим, fullduplex. Проблема в том, что на выходе SCK нет такта - все время висит высокий или низкий уровень в зависимости от CPOL. Не выставляются флаги Busy и RXNE, не сбрасывается флаг TXE. Ниже приведен код, проект собран в Keil. Проект испытывал на собранной плате, на STM32F0 DISCOVERY. Также пробовал загружать пример от STM на плату STM32F4 (MEMS акселерометр). Везде одна и та же проблема - SPI мертв. Видимо упускаю что-то системное, что то общее для всех 3х плат, но у меня уже нет идей, что это может быть. Прошу помощи.

#include "stm32f10x.h"
#include "stm32f10x_spi.h"

void init();
void spi();


void main()
{
init();
while(1)
{
spi();

}
}

void init()
{

RCC->APB2ENR^=(1<<0 | 1<<2 | 1<<3 | 1<<5 | 1<<12 ); // spi1, GPIO clock enable
GPIOA->CRL&=0x000000ff; // port A config to spi
GPIOA->CRL^=0xb4b34b00;

SPI1->CR1=(1<<0|1<<1|1<<5|1<<8|1<<9); // spi config

}



void spi()
{
unsigned char ax=0;
unsigned char ay=0;
unsigned char az=0;
unsigned char temp;
temp=0xE8;

SPI1->CR1^=(1<<2|1<<6); // SPI enable


while (!(SPI1->SR & SPI_SR_TXE)); // if tx empty then transfer
SPI1->DR = temp;


while (!(SPI1->SR & SPI_SR_RXNE));
ax= SPI1->DR;

SPI1->DR = temp;
while (!(SPI1->SR & SPI_SR_RXNE)); // wait before reiceve ends
ay = SPI1->DR;

SPI1->DR = temp;
while (!(SPI1->SR & SPI_SR_RXNE)); // wait before reiceve ends
az= SPI1->DR;


SPI1->CR1^=(1<<6); // SPI disable

}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ViKo
сообщение Apr 23 2014, 13:14
Сообщение #2


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Пока не залезете в Reference Manual и не изучите регистры SPI, не догадаетесь, в чем ошибка.
У меня было так, для STM32F207. Такты включались раньше.
CODE
/* SPI1 -- связь с SFM M25PE40
8-bit, MSB first, SPEn, Fpclk2 / 4 (15 MHz), Master, CPOL=0, CPHA=0
Раньше разрешал SPI позже! */
SPI1->CR1 =
SPI_CR1_CPHA * 0 | // Clock Phase
SPI_CR1_CPOL * 0 | // Clock Polarity
SPI_CR1_MSTR * 1 | // Master Selection
SPI_CR1_BR_0 * 1 | // Baud Rate Control - fpclk2 / 4 = 15 MHz
SPI_CR1_BR_1 * 0 | //
SPI_CR1_BR_2 * 0 | //
SPI_CR1_SPE * 1 | // SPI Enable
SPI_CR1_LSBFIRST * 0 | // Frame Format
SPI_CR1_SSI * 1 | // Internal slave select
SPI_CR1_SSM * 1 | // Software slave management
SPI_CR1_RXONLY * 0 | // Receive only
SPI_CR1_DFF * 0 | // Data Frame Format
SPI_CR1_CRCNEXT * 0 | // Transmit CRC next
SPI_CR1_CRCEN * 0 | // Hardware CRC calculation enable
SPI_CR1_BIDIOE * 0 | // Output enable in bidirectional mode
SPI_CR1_BIDIMODE * 0; // Bidirectional data mode enable
SPI1->CR2 =
SPI_CR2_RXDMAEN * 0 | // Rx Buffer DMA Enable
SPI_CR2_TXDMAEN * 0 | // Tx Buffer DMA Enable
SPI_CR2_SSOE * 0 | // SS Output Enable
SPI_CR2_FRF * 0 | // Protocol format - 0: SPI Motorola mode, 1: SPI TI mode
SPI_CR2_ERRIE * 0 | // Error Interrupt Enable
SPI_CR2_RXNEIE * 0 | // RX buffer Not Empty Interrupt Enable
SPI_CR2_TXEIE * 0; // Tx buffer Empty Interrupt Enable
// SPI1->CR1 |= SPI_CR1_MSTR | SPI_CR1_SPE; // Разрешить, Мастер

/* SPI2 -- конфигурирование EP3C5
CONF_N (NSS) переключается программно */
SPI2->CR1 =
SPI_CR1_CPHA * 0 | // Clock Phase
SPI_CR1_CPOL * 0 | // Clock Polarity
SPI_CR1_MSTR * 1 | // Master Selection
SPI_CR1_BR_0 * 0 | // Baud Rate Control - fpclk1 / 2 = 15 MHz
SPI_CR1_BR_1 * 0 | //
SPI_CR1_BR_2 * 0 | //
SPI_CR1_SPE * 1 | // SPI Enable (раньше включалось позже!)
SPI_CR1_LSBFIRST * 1 | // Frame Format
SPI_CR1_SSI * 1 | // Internal slave select (раньше задавалось!)
SPI_CR1_SSM * 1 | // Software slave management
SPI_CR1_RXONLY * 0 | // Receive only
SPI_CR1_DFF * 0 | // Data Frame Format - 8 bit
SPI_CR1_CRCNEXT * 0 | // Transmit CRC next
SPI_CR1_CRCEN * 0 | // Hardware CRC calculation enable
SPI_CR1_BIDIOE * 0 | // Output enable in bidirectional mode
SPI_CR1_BIDIMODE * 0; // Bidirectional data mode enable
SPI2->CR2 =
SPI_CR2_RXDMAEN * 0 | // Rx Buffer DMA Enable
SPI_CR2_TXDMAEN * 0 | // Tx Buffer DMA Enable
SPI_CR2_SSOE * 0 | // SS Output Enable (все равно используется GPIO?)
SPI_CR2_FRF * 0 | // Protocol format - 0: SPI Motorola mode, 1: SPI TI mode
SPI_CR2_ERRIE * 0 | // Error Interrupt Enable
SPI_CR2_RXNEIE * 0 | // RX buffer Not Empty Interrupt Enable
SPI_CR2_TXEIE * 0; // Tx buffer Empty Interrupt Enable
// SPI2->CR1 |= SPI_CR1_SPE;

/* SPI3 -- регистр управления аналоговыми узлами
8-bit, MSB first, SPEn, Fpclk1 / 2 (15MHz), Master, CPOL=0, CPHA=0
74HC595 SCK - Pos, AD5314 SCK - Neg (изменить CPOL) */
SPI3->CR1 =
SPI_CR1_CPHA * 0 | // Clock Phase
SPI_CR1_CPOL * 0 | // Clock Polarity HC595
SPI_CR1_MSTR * 1 | // Master Selection
SPI_CR1_BR_0 * 0 | // Baud Rate Control - fpclk1 / 2 = 15 MHz
SPI_CR1_BR_1 * 0 | //
SPI_CR1_BR_2 * 0 | //
SPI_CR1_SPE * 1 | // SPI Enable
SPI_CR1_LSBFIRST * 0 | // Frame Format
SPI_CR1_SSI * 1 | // Internal slave select
SPI_CR1_SSM * 1 | // Software slave management
SPI_CR1_RXONLY * 0 | // Receive only
SPI_CR1_DFF * 0 | // Data Frame Format (8 bit)
SPI_CR1_CRCNEXT * 0 | // Transmit CRC next
SPI_CR1_CRCEN * 0 | // Hardware CRC calculation enable
SPI_CR1_BIDIOE * 0 | // Output enable in bidirectional mode
SPI_CR1_BIDIMODE * 0; // Bidirectional data mode enable
SPI3->CR2 =
SPI_CR2_RXDMAEN * 0 | // Rx Buffer DMA Enable
SPI_CR2_TXDMAEN * 0 | // Tx Buffer DMA Enable
SPI_CR2_SSOE * 0 | // SS Output Enable
SPI_CR2_FRF * 0 | // Protocol format - 0: SPI Motorola mode, 1: SPI TI mode
SPI_CR2_ERRIE * 0 | // Error Interrupt Enable
SPI_CR2_RXNEIE * 0 | // RX buffer Not Empty Interrupt Enable
SPI_CR2_TXEIE * 0; // Tx buffer Empty Interrupt Enable
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- P4R4N014C   STM32F100 SPI no SCK   Apr 20 2014, 16:31
- - A.Lex   Могу предложить для сравнения работающий код иници...   Apr 20 2014, 18:07
- - P4R4N014C   Спасибо что откликнулись. С вашим исходником у мен...   Apr 21 2014, 17:18
|- - A.Lex   Должен перед Вами извиниться: перед разрешением SP...   Apr 21 2014, 17:55
- - P4R4N014C   Такт и данные на выводе MOSI появляются при запуск...   Apr 22 2014, 16:10
|- - Сергей Борщ   Цитата(P4R4N014C @ Apr 22 2014, 19:10) Та...   Apr 24 2014, 06:28
- - toweroff   Цитата(P4R4N014C @ Apr 20 2014, 20:31) Зд...   Apr 22 2014, 16:35
- - P4R4N014C   Опыт общения на форумах почти нулевой, так что нек...   Apr 23 2014, 05:53
|- - Сергей Борщ   Цитата(P4R4N014C @ Apr 23 2014, 08:53) Оп...   Apr 23 2014, 07:34
- - P4R4N014C   Позовите еще кого-нибудь, пусть тоже напишут об ош...   Apr 23 2014, 11:32
|- - toweroff   Цитата(P4R4N014C @ Apr 23 2014, 15:32) По...   Apr 23 2014, 11:59
- - P4R4N014C   Viko, спасибо за ответ! Цитата(toweroff ...   Apr 23 2014, 15:10
|- - toweroff   Цитата(P4R4N014C @ Apr 23 2014, 19:10) Мн...   Apr 23 2014, 16:02
|- - P4R4N014C   Цитата(toweroff @ Apr 23 2014, 20:02) хор...   Apr 23 2014, 16:28
- - toweroff   В инициализации много ума нет. Сложно было провери...   Apr 23 2014, 18:26
|- - P4R4N014C   Цитата(toweroff @ Apr 23 2014, 22:26) В и...   Apr 24 2014, 04:37
- - toweroff   Еще один вариант - что при отладке отображаются ре...   Apr 24 2014, 08:06


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd August 2025 - 12:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01422 секунд с 7
ELECTRONIX ©2004-2016