Не получается сконфигурировать SPI1 на STM32F103C8
25.11.2016, 10:07
|
|
|
Временная регистрация
Регистрация: 10.11.2016
Сообщений: 65
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Не получается сконфигурировать SPI1 на STM32F103C8
Всем привет!
У меня есть STM32F103C8 !
Хочу сконфигурировать SPI1 на нем, написал прогу!
Нажмите, чтобы открыть спойлер
//spi1_mosi-pa7,spi1_miso-pa6,spi1_sck-pa5,spi1_nss-pa4
#include "stm32f10x.h"
int main()
{
RCC-›APB2ENR=RCC_APB2ENR_IOPAEN;
RCC-›APB2ENR|=RCC_APB2ENR_AFIOEN;
RCC-›APB2ENR|=RCC_APB2ENR_SPI1EN;
GPIOA-›CRL|=GPIO_CRL_CNF7_1;//mosi
GPIOA-›CRL|=GPIO_CRL_MODE7;
GPIOA-›CRL|=GPIO_CRL_CNF6_1;//miso
GPIOA-›CRL&=~GPIO_CRL_MODE6;
GPIOA-›CRL|=GPIO_CRL_CNF5_1;//sck
GPIOA-›CRL|=GPIO_CRL_MODE5;
GPIOA-›CRL|=GPIO_CRL_CNF4_1;//miso
GPIOA-›CRL&=~GPIO_CRL_MODE4;
SPI1-›CR1=SPI_CR1_BR_0|SPI_CR1_BR_1|SPI_CR1_BR_2;
//SPI1-›CR1=SPI_CR1_BIDIMODE;
//SPI1-›CR1|=SPI_CR1_BIDIOE;
SPI1-›CR1|=SPI_CR1_SSM;
SPI1-›CR1|=SPI_CR1_SSI;
SPI1-›CR1|=SPI_CR1_MSTR;
//SPI1-›CR2=SPI_CR2_SSOE;
SPI1-›CR1|=SPI_CR1_SPE;
while (1)
{
SPI1-›DR=0x55;
while (!(SPI1-›SR&SPI_SR_TXE));
}
На выводах SCK и MOSI импульсов нет!
Что не так, подскажите, пожалуйста!
Спасибо!
|
|
|
|
25.11.2016, 10:14
|
|
|
Гражданин KAZUS.RUN
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
|
Re: Не получается сконфигурировать SPI1 на STM32F103C8
Держите:
oid SPI1_init (void)
{
//AFIO-›MAPR |=AFIO_MAPR_SPI1_REMAP ;
//âûâîä óïðàâëåíèÿ MOSI PA7: âûõîä äâóõòàêòíûé îáùåãî íàçíà÷åíèÿ, 50 MHz
GPIOA-›CRL |= GPIO_CRL_MODE7; //
GPIOA-›CRL &= ~GPIO_CRL_CNF7; //
GPIOA-›CRL |= GPIO_CRL_CNF7_1; //
//âûâîä MISO PA6: âûõîä äâóõòàêòíûé ñ àëüòåðíàòèâíîé ôóíóöèåé, 50MHz
GPIOA-›CRL &= ~GPIO_CRL_MODE6; //
GPIOA-›CRL &= ~GPIO_CRL_CNF6; //
GPIOA-›CRL |= GPIO_CRL_CNF6_1; //
// GPIOA-›BSRR = GPIO_BSRR_BS6; //
//âûâîä SCK PA5: âûõîä äâóõòàêòíûé ñ àëüòåðíàòèâíîé ôóíóöèåé, 50MHz
GPIOA-›CRL |= GPIO_CRL_MODE5; //
GPIOA-›CRL &= ~GPIO_CRL_CNF5; //
GPIOA-›CRL |= GPIO_CRL_CNF5_1; //
//âûâîä NSS PA4: âûõîä äâóõòàêòíûé ñ àëüòåðíàòèâíîé ôóíóöèåé, 50MHz
// GPIOA-›CRL |= GPIO_CRL_MODE4; //
// GPIOA-›CRL &= ~GPIO_CRL_CNF4; //
//GPIOA-›CRL |= GPIO_CRL_CNF4_1; //
GPIOA-›CRL |= GPIO_CRL_MODE4;
GPIOA-›CRL &=~GPIO_CRL_CNF4;
GPIOA-›BSRR|= GPIO_BSRR_BS4;
//íàñòðîéêà ìîäóëÿ SPI
RCC-›APB2ENR |= RCC_APB2ENR_SPI1EN; //âêëþ÷èòü òàêòèðîâàíèå
SPI1-›CR2 = 0x0000; //
SPI1-›CR1 = SPI_CR1_MSTR; //êîíòðîëëåð - ìàñòåð
SPI1-›CR1 &= ~SPI_CR1_CPHA;
SPI1-›CR1 &= ~SPI_CR1_CPOL;
SPI1-›CR1 &= ~SPI_CR1_RXONLY; // ïîëíûé äóïëåêñ
SPI1-›CR1 &= ~SPI_CR1_DFF; // ÔÎÐÌÀÒ ÄÀÍÍÛÕ 8 ÁÈÒ
SPI1-›CR1 |= SPI_CR1_BR; //çàäàåì ñàìóþ íèçêóþ ñêîðîñòü
/*
SPI1-›CR1 &= ~SPI_CR1_BR_0;
SPI1-›CR1 &= ~SPI_CR1_BR_1;
SPI1-›CR1 &= ~SPI_CR1_BR_2;
*/
SPI1-›CR1 |= SPI_CR1_SSI;
SPI1-›CR1 |= SPI_CR1_SSM; //ïðîãðàììíîå óïðàâëåíèå NSS
SPI1-›CR1 |= SPI_CR1_SPE; //ðàçðåøàåì ðàáîòó SPI
return;
}
uint8_t spi_send (uint8_t data)
{
while (!(SPI1-›SR & SPI_SR_TXE)); //ïðåäûäóùàÿ ïîñûëêà çàâåðøåíà
SPI1-›DR = data; //çàãðóæàåì äàííûå äëÿ îòñûëêè
while (!(SPI1-›SR & SPI_SR_RXNE)); //æäåì îêîí÷àíèÿ îáìåíà
return (SPI1-›DR); //÷èòàåì ïðèíÿòûå äàííûå
}
__________________
То, что нас не убивает - делает нас сильнее
|
|
|
|
25.11.2016, 11:01
|
|
|
Временная регистрация
Регистрация: 10.11.2016
Сообщений: 65
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Не получается сконфигурировать SPI1 на STM32F103C8
Позвольте пару вопросов, а то я не понимаю!
1 Зачем сначала GPIOA-›CRL &= ~GPIO_CRL_CNF7; // потом GPIOA-›CRL |= GPIO_CRL_CNF7_1; //? Почему нельзя просто GPIOA-›CRL |= GPIO_CRL_CNF7_1; //?
2 Я в программе не увидел RCC_APB2ENR_IOPAEN, RCC-›APB2ENR|=RCC_APB2ENR_AFIOEN. Разве они не нужны?
3 В функции oid SPI1_init (void) я не увидел вызов функции spi_send ().
Спасибо!
|
|
|
|
25.11.2016, 11:11
|
|
|
Гражданин KAZUS.RUN
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
|
Re: Не получается сконфигурировать SPI1 на STM32F103C8
1 Зачем сначала GPIOA-›CRL &= ~GPIO_CRL_CNF7; // потом GPIOA-›CRL |= GPIO_CRL_CNF7_1; //? Почему нельзя просто GPIOA-›CRL |= GPIO_CRL_CNF7_1; //?
Обнуляем сначала все биты, потом выставляем нужный, мало ли что было ранее записано (по умолчанию например)
2 Я в программе не увидел RCC_APB2ENR_IOPAEN, RCC-›APB2ENR|=RCC_APB2ENR_AFIOEN. Разве они не нужны?
Задано в конфиге GPIO
3 В функции void SPI1_init (void) я не увидел вызов функции spi_send ().
А зачем вызывать чтение/запись в конфиге?вызывайте ее в основной проге
__________________
То, что нас не убивает - делает нас сильнее
|
|
|
|
Сказали "Спасибо" serb-radio
|
|
|
25.11.2016, 11:25
|
|
|
Временная регистрация
Регистрация: 10.11.2016
Сообщений: 65
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Не получается сконфигурировать SPI1 на STM32F103C8
serb-radio, вы можете еще выслать конфиг GPIO?
я скопировал часть SPI в свою прогу! Эффект тот же(
Спасибо!
|
|
|
|
25.11.2016, 11:27
|
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
|
Re: Не получается сконфигурировать SPI1 на STM32F103C8
|
|
|
|
25.11.2016, 11:35
|
|
|
Временная регистрация
Регистрация: 10.11.2016
Сообщений: 65
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Не получается сконфигурировать SPI1 на STM32F103C8
serb-radio, я добавил в своей проге GPIOA-›CRL &= ~GPIO_CRL_CNFх перед конфигурацией выводов SPI1, и все заработало!
Спасибо!
|
|
|
|
25.11.2016, 12:10
|
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
|
Re: Не получается сконфигурировать SPI1 на STM32F103C8
Easyrider83, спагетти аля SPL ...
Паш, зачем тебе стм - пиши для ардуньи.
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 25.11.2016 в 12:19.
|
|
|
|
25.11.2016, 13:18
|
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
|
Re: Не получается сконфигурировать SPI1 на STM32F103C8
dosikus, Леша, дорогой, ты бы посмотрел исходники к серьезным девайсам для промышленного применения. SPL - это цветочки. Там параметры в виде строк передаются и применяются методы сравнения. А еще кругом printf и все базы данных в текстовом виде. Проц 168 МГц все это крутит, при этом в системе запущено больше сотни процессов. И все работает. Команда разработчиков - около ста человек в Канаде.
|
|
|
|
25.11.2016, 13:47
|
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
|
Re: Не получается сконфигурировать SPI1 на STM32F103C8
Easyrider83, ты мне хочешь рассказать о деградации нынешнего образования?
__________________
Осторожно , злой кот
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:51.
|
|