Jump to content
Sign in to follow this  
imusg

Spi2Spi Stm32

Recommended Posts

Подскажите пожалуйста, для тренировки работы с SPI сделать пересылку данных SPI1->SPI3->USART2 но в итоге в уарт ничего не пришло! Помогите разобраться!

#include <stm32f4xx_gpio.h>
#include <stm32f4xx_rcc.h>
#include <stm32f4xx_spi.h>
#include <stm32f4xx_usart.h>
void init_gpio_c() {
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
GPIO_InitTypeDef init;
init.GPIO_Mode = GPIO_Mode_AF;
init.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;
init.GPIO_OType = GPIO_OType_PP;
GPIO_Init(GPIOC,&init);
}
void init_gpio_a() {
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_InitTypeDef init;
init.GPIO_Mode = GPIO_Mode_AF;
init.GPIO_PuPd = GPIO_PuPd_UP;
init.GPIO_Speed = GPIO_Speed_50MHz;
init.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
init.GPIO_OType = GPIO_OType_PP;
GPIO_Init(GPIOA,&init);
}
void spi1_init () {
 GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);
 GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);
 GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);
RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1, ENABLE);
SPI_InitTypeDef spi_one;
spi_one.SPI_Mode = SPI_Mode_Master;
spi_one.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16 ;
spi_one.SPI_CPHA = SPI_CPHA_1Edge;
spi_one.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
spi_one.SPI_CPOL = SPI_CPOL_Low;
spi_one.SPI_CRCPolynomial = 7;
spi_one.SPI_DataSize = SPI_DataSize_8b;
spi_one.SPI_FirstBit = SPI_FirstBit_MSB;
spi_one.SPI_NSS = SPI_NSS_Hard;
SPI_Init(SPI1,&spi_one);
SPI_Cmd(SPI1,ENABLE);
}
void spi2_init () {
 GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_SPI3);
 GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_SPI3);
 GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_SPI3);
RCC_APB2PeriphResetCmd(RCC_APB1Periph_SPI3, ENABLE);
SPI_InitTypeDef spi_two;
spi_two.SPI_Mode = SPI_Mode_Slave;
spi_two.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16 ;
spi_two.SPI_CPHA = SPI_CPHA_1Edge;
spi_two.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
spi_two.SPI_CPOL = SPI_CPOL_Low;
spi_two.SPI_CRCPolynomial = 7;
spi_two.SPI_DataSize = SPI_DataSize_8b;
spi_two.SPI_FirstBit = SPI_FirstBit_MSB;
spi_two.SPI_NSS = SPI_NSS_Hard;
SPI_Init(SPI3,&spi_two);
SPI_Cmd(SPI3,ENABLE);
}
void USART_Config()
{
USART_InitTypeDef USART_InitStructure;

// подключаем тактирование портов и USART
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
// порты - подключаются к альтернативным функциям
GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_USART2);
// задаём свойства USART
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
// распихиваем переменную USART_InitStructure по регистрам и USART2
USART_Init(USART2, &USART_InitStructure);
// запускаем периферию USART1 и USART2
USART_Cmd(USART2, ENABLE);
}
void delay(unsigned int s){
while(--s > 0) {
 __NOP();
}
}
void go () {
char data = "Hello!!! ";
SPI_I2S_SendData(SPI1, data);
delay(500);
char recv;
recv = SPI_I2S_ReceiveData(SPI3);
delay(500);
USART_SendData(USART2,recv);
delay(500);
}
int main(void)
{
init_gpio_c();
init_gpio_a();
spi1_init ();
spi2_init ();
while(1)
{
 go();
}
}

Share this post


Link to post
Share on other sites

Вопросы ...

1. Как я понял, Вы хотите что-то передавать из SPI1 в SPI3 и далее в USART2. Надеюсь Вы соединили соответствующие ноги проца? В смысле MISO -> MOSI и наоборот?

2. Чем Вы смотрите данные на выходе USART2? MAX3232 на COM-порт?

И вообще. Разбейте задачу на куски. Т.е.:

1. Включите только SPI1. Погоняйте данные, посмотрите ноги осциллом, есть там что-то или нет ...

2. Подключите SPI3

И т.д.

От себя могу предложить работающий, проверенный модуль для USART2. Передаёт по одному байту и блоки, приём в прерывании в буфер. Без DMA.

PS. Пожалуйста, не пишите Stm32. Их же как у собаки блох и нередко отличаются ....

Пишите STM32F4, чтоб было понятно, о чём речь ....

Например, я работаю на STM32F4, каких-то особенностей STM32F1 могу и не знать. Ну и т.д.

Share this post


Link to post
Share on other sites

Дабы темы не плодить, спрошу здесь. Настраиваю SPI с аппаратным выходом NSS. Всё работает кроме вывода NSS, на выходе всегда низкий уровень, что не так?

#include "stm32f10x_spi.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x.h"
#include "misc.h"
#include "stm32f10x_exti.h"


unsigned int d;
char s;

void init(void){

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

GPIO_InitTypeDef port;
port.GPIO_Mode = GPIO_Mode_AF_PP;
port.GPIO_Pin =GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
port.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &port);




RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);

SPI_InitTypeDef SPI;
SPI_StructInit(&SPI);
SPI.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI.SPI_Mode = SPI_Mode_Master;
SPI.SPI_DataSize = SPI_DataSize_16b;
SPI.SPI_CPOL = SPI_CPOL_Low;
SPI.SPI_CPHA = SPI_CPHA_1Edge;
SPI.SPI_NSS = SPI_NSS_Hard;
SPI.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32;
SPI.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_Init(SPI1,&SPI);

SPI_SSOutputCmd(SPI1,ENABLE);

SPI_I2S_ITConfig(SPI1, SPI_I2S_IT_TXE,ENABLE);


NVIC_EnableIRQ(SPI1_IRQn);
SPI_Cmd(SPI1,ENABLE);
}




int main(void)
{
init();
   while(1);
}


void SPI1_IRQHandler(void)
{
if (SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE))
   {
for(d=0;d<50;d++);
SPI_I2S_SendData(SPI1,0b1110101110011010);
   }

}


Share this post


Link to post
Share on other sites

Литиевые батарейки Fanso для систем телеметрии и дистанционного контроля

Системы телеметрии находят все более широкое применение во многих отраслях на промышленных и коммунальных объектах. Требования, предъявляемые к условиям эксплуатации приборов телеметрии и, как следствие, источников питания для них, могут быть довольно жесткими. Fanso предоставляет широкую линейку продукции, рассчитанной на различные условия эксплуатации, что позволяет подобрать батарейку для каждого конкретного применения, в том числе и для устройств телеметрии.

Подробнее

Спрошу здесь.В модуле посудомойки стоит STM32P301VCT  Есть дамп прошивки как его туда залить?

Share this post


Link to post
Share on other sites
                     

Материалы вебинара STM32G0 – новый лидер бюджетных 32-битных микроконтроллеров от STMicroelectronics

На вебинаре были продемонстрированы современные методы тестирования производительности микроконтроллеров на примере самых бюджетных 32-битных семейств общего назначения STM32G0 и STM32F0, проведено их подробное сравнение. Мы подготовили для вас материалы. Вы можете посмотреть видеозапись вебинара, ознакомиться с ответами на вопросы, загрузить код для тестирования, прочитать статьи по теме

Подробнее...

Похожая платка и у меня.Программатор только такой или чтото ещё можно применить?

 

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Сообщения

    • В голове эта мысля сидела Спасибо за пинок В общем хочу платы раскидать на шлейфы, завтра подумаю какие штекера приобрести, думаю так удобней будет.
    • 1. Дорожки "продетые" между ногами это крайне плохо. Ноги МС толщиной 1 мм., а у вас пятаки всего 1.8 мм. диаметром. Что останется для припаивания?  Тоненькое колечко. 2. Что за резисторы у вас использованы?  Если между дырками всего 7 мм. то МЛТ 0.125 в них не встанут никак.  3. Конденсаторы 2200 мкф.\ 25 в.  и диаметром всего 10 мм. это надо ещё поискать. 4. Тонкие дорожки шириной всего 0.6 мм. "перетравить" такие очень легко, да и ток нормальный по ним не пропустить.  В общем "печатка" так себе. Слабых мест очень много. Я бы такую паять точно не стал.
    • Когда схема объёмная и не простая, я распечатываю листы и склеиваю в единую схему. С таким материалом легче работать, весь маршрут перед глазами. Можно и карандашиком трассу пометить. Потом беру генератор с установленной частотой 1 кГц 250 мВ подаю на AUX. И щупом осциллоскопа с хорошо заточенной иголочкой продвигаюсь по отмеченному маршруту. На мой взгляд, это самый оптимальный режим поиска.
    • Тем что спереди он машину приподнял.
    • А, спереди, слабо пакетик повесить.
    • а я вот дома от котла с трубным отоплением греюсь и без насоса,циркулирует зараза,впрочем как и на авто. можно на авто конечно так установить,что циркуляции не будет.
    • Обалдеть.
  • Покупай!

×
×
  • Create New...