Easyelectronics.ru

Электроника для всех
Текущее время: 25 июн 2019, 21:01

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: STM8L не тактирует SPI
СообщениеДобавлено: 23 дек 2018, 19:09 
Только пришел

Зарегистрирован: 08 июл 2012, 14:08
Сообщения: 19
Доброго всем времени суток.

Имею проблему с выдачей такта при обмене по SPI1 на STM8L152R8.
Порты проинициализированы и тактирование SPI1 включено (PCKEN14). Помимо STM8L152R8 пробовал на STM8L051F3 - без изменений.
Использую стандартную библиотеку. По началу пенял на паразитные ёмкости, но платы вымыты дважды а изменений никаких. Разводка наипростейшая.
На осциллографе виден чёткий пульс сразу после запуска (инициализация), а потом какие-то пилообразные всплески. Причём их амплитуда обратно пропорциональна частоте тактирования SPI.
Перелопатил мануал, но кроме указания дефолтной инициализации пинов на input floating там ничего нет.
С STM8S и STM32F проблем небыло. Может кто уже наступал на эти грабли?

Инициализация:

void SPI_Config(void)
{
GPIO_DeInit(GPIOB);
GPIO_Init(GPIOB, GPIO_Pin_5, GPIO_Mode_Out_PP_High_Fast);
GPIO_Init(GPIOB, GPIO_Pin_6, GPIO_Mode_Out_PP_High_Fast);
GPIO_Init(GPIOB, GPIO_Pin_7, GPIO_Mode_In_FL_No_IT);
//GPIO_ExternalPullUpConfig(GPIOB, GPIO_Pin_5, ENABLE);

SPI_DeInit(SPI1);

SPI_Init(SPI1, SPI_FirstBit_MSB, SPI_BaudRatePrescaler_256, SPI_Mode_Master,
SPI_CPOL_Low, SPI_CPHA_1Edge, SPI_Direction_2Lines_FullDuplex,
SPI_NSS_Soft, (uint8_t)0x07);

SPI_Cmd(SPI1, ENABLE);
}


Вложения:
Комментарий к файлу: HSE 2MHz
62.5 KHz STM8L152 5.png
62.5 KHz STM8L152 5.png [ 74.75 Кб | Просмотров: 365 ]
Комментарий к файлу: HSI 2MHz
62.5 KHz STM8L152 4.png
62.5 KHz STM8L152 4.png [ 67.81 Кб | Просмотров: 365 ]
Комментарий к файлу: HSI 16MHz
62.5 KHz STM8L152.png
62.5 KHz STM8L152.png [ 70.83 Кб | Просмотров: 365 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8L не тактирует SPI
СообщениеДобавлено: 14 фев 2019, 15:02 
Здравствуйте!

Зарегистрирован: 02 сен 2015, 14:11
Сообщения: 4
Может кому пригодится, т.к. ТС тут давно не был:

Код:
#include "stm8l15x.h"

void main( void )
{
//Настраиваем выводы для SPI.
GPIO_Init(GPIOB, GPIO_Pin_5, GPIO_Mode_Out_PP_Low_Fast);   // SLK
GPIO_Init(GPIOB, GPIO_Pin_6, GPIO_Mode_Out_PP_Low_Fast);   // MOSI
GPIO_Init(GPIOB, GPIO_Pin_7, GPIO_Mode_In_PU_No_IT);        // MISO
GPIO_Init(GPIOB, GPIO_Pin_4, GPIO_Mode_Out_PP_Low_Fast);   // CS

CLK_PeripheralClockConfig(CLK_Peripheral_SPI1,ENABLE);
SPI_DeInit(SPI1);

SPI_Init
(
  SPI1,
  SPI_FirstBit_MSB, SPI_BaudRatePrescaler_2, SPI_Mode_Master,
  SPI_CPOL_Low, SPI_CPHA_1Edge,
  SPI_Direction_2Lines_FullDuplex, SPI_NSS_Soft, 0x00
);

//Включаем SPI.
SPI_Cmd(SPI1, ENABLE);         
GPIO_ResetBits(GPIOB, GPIO_Pin_4); // NSS

// пишем в регистры настройки

SPI_SendData(SPI1, 0x20);          // адрес CTRL_REG4
while (!(SPI1->SR & SPI_FLAG_TXE)); // ждём TXE=1 буфер передачи пуст
SPI_SendData(SPI1, 0x5F);          // параметр
while (!(SPI1->SR & SPI_FLAG_RXNE)); // ждём RXNE=1 заполнение буфера приёма
temp = SPI_ReceiveData(SPI1);      // считаем
while (!(SPI1->SR & SPI_FLAG_RXNE)); // ждём RXNE=1 заполнение буфера приёма
temp = SPI_ReceiveData(SPI1);      // считаем

while (!(SPI1->SR & SPI_FLAG_TXE)); // ждём TXE=1 буфер передачи пуст
while (SPI1->SR & SPI_FLAG_BSY);   // ждём BSY=0

GPIO_SetBits(GPIOB, GPIO_Pin_4); // NSS
//...
}



Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB