|
Чтение по SPI из DRV8303 |
|
|
|
May 11 2018, 07:30
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Есть функции чтения/записи Код void DRV8308_WriteRegister(uint8_t address, uint16_t data) { //clear bit7 in address address &= 0x7F; CS1_HI; //inverse logic!!! SPI_TransferByte(DRV8308_SPI, address); SPI_TransferByte(DRV8308_SPI, data>>8); SPI_TransferByte(DRV8308_SPI, data&0xFF); CS1_LO; }
void DRV8308_ReadRegister(uint8_t address, uint16_t *data) { uint8_t tmp_data[2]={0}; //set bit7 in address address |= 0x80; CS1_HI; //inverse logic!!! SPI_TransferByte(DRV8308_SPI, address); tmp_data[0] = SPI_TransferByte(DRV8308_SPI, 0x00); tmp_data[1] = SPI_TransferByte(DRV8308_SPI, 0x00);
CS1_LO; *data = (tmp_data[0] << 8) | tmp_data[1]; } Читаю из регистра 0x2A - дефолтное значение 0x18 - получаю 0x08 Для проверки пишу в регистр 0x07 пишу 0x07 - читаю 0x03 пишу 0x0F - читаю 0x07 пишу 0x09 - читаю 0x00 Подсоеденил логик аналайзер - все сигналы в норме - пин МИСО возвращает правильные значения. Единственно что - на 0x07 и 0x0F последний бит почему то дребезжит.Почему контролер ( STM32F303CB) не читает правильно пин МИСО?
Сообщение отредактировал Jenya7 - May 11 2018, 08:23
Эскизы прикрепленных изображений
|
|
|
|
|
 |
Ответов
|
May 11 2018, 09:14
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Цитата(haker_fox @ May 11 2018, 14:55)  Режим SPI (0, 1, 2, 3) на микроконтроллере правильно настроили? Альтернативную функцию пина включили?) я все режимы перебрал CODE #define SPIx_SCK_PIN GPIO_Pin_3 #define SPIx_MISO_PIN GPIO_Pin_4 #define SPIx_MOSI_PIN GPIO_Pin_5
#define SPIx_SCK_SOURCE GPIO_PinSource3 #define SPIx_MISO_SOURCE GPIO_PinSource4 #define SPIx_MOSI_SOURCE GPIO_PinSource5
#define SPIx_GPIO_PORT GPIOB #define SPIx_AF GPIO_AF_5
#define CS1_HI (GPIOB->BSRR = GPIO_Pin_6) #define CS1_LO (GPIOB->BRR = GPIO_Pin_6)
void SPI_Setup(SPI_TypeDef *SPIx) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; uint32_t spi_mode = 0; CS1_LO; GPIO_PinAFConfig(SPIx_GPIO_PORT, SPIx_SCK_SOURCE, SPIx_AF); GPIO_PinAFConfig(SPIx_GPIO_PORT, SPIx_MOSI_SOURCE, SPIx_AF); GPIO_PinAFConfig(SPIx_GPIO_PORT, SPIx_MISO_SOURCE, SPIx_AF); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
/* SPI SCK pin configuration */ GPIO_InitStructure.GPIO_Pin = SPIx_SCK_PIN; GPIO_Init(SPIx_GPIO_PORT, &GPIO_InitStructure);
/* SPI MOSI pin configuration */ GPIO_InitStructure.GPIO_Pin = SPIx_MOSI_PIN; GPIO_Init(SPIx_GPIO_PORT, &GPIO_InitStructure);
/* SPI MISO pin configuration */ GPIO_InitStructure.GPIO_Pin = SPIx_MISO_PIN; GPIO_Init(SPIx_GPIO_PORT, &GPIO_InitStructure);
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); if (SPIx == SPI1) { RCC->APB2ENR |= RCC_APB2Periph_SPI1; } else if (SPIx == SPI2) { RCC->APB1ENR |= RCC_APB1Periph_SPI2; } else if (SPIx == SPI3) { RCC->APB1ENR |= RCC_APB1Periph_SPI3; } else return;
/*!< SPI Config */ SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; switch(spi_mode) { case 0: SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; break; case 1: SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; break; case 2: SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; break; case 3: SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; break; } SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32; //APB1=36Mhz => ~1Mhz //APB2=72Mhz SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPIx, &SPI_InitStructure);
/* SPI enable */ SPIx->CR1 |= SPI_CR1_SPE; }
Сообщение отредактировал IgorKossak - May 11 2018, 19:07
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!
|
|
|
|
Сообщений в этой теме
Jenya7 Чтение по SPI из DRV8303 May 11 2018, 07:30  Forger Попробуйте сделать все это "в лоб" - ног... May 11 2018, 09:54 haker_fox А драйвер SPI вы сами писали? Если нет, то лучше п... May 11 2018, 14:12 k155la3 Проверьте осцилографом уровни на линиях SPI. При н... May 11 2018, 19:43 Jenya7 Цитата(k155la3 @ May 12 2018, 01:43) Пров... May 12 2018, 17:15  Aleksandr Baranov Цитата(Jenya7 @ May 12 2018, 13:15) даже ... May 12 2018, 18:44   Jenya7 Цитата(Aleksandr Baranov @ May 12 2018, 23... May 13 2018, 04:56    esaulenka Цитата(Jenya7 @ May 13 2018, 07:56) я не ... May 15 2018, 09:06    k155la3 Цитата(Jenya7 @ May 13 2018, 07:56) . . .... May 15 2018, 09:40 Jenya7 Выяснилось что МИСО пин драйвера прямо скажем хилы... May 17 2018, 12:55 haker_fox QUOTE (Jenya7 @ May 17 2018, 20:55) Выясн... May 18 2018, 00:35 k155la3 Цитата(Jenya7 @ May 17 2018, 15:55) Выясн... May 18 2018, 09:58  Jenya7 Цитата(k155la3 @ May 18 2018, 14:58) Непл... May 19 2018, 21:16 Serge V Iz постоянная времени при R=3.3k и C=всего лишь 100p ... May 20 2018, 06:40 Jenya7 Цитата(Serge V Iz @ May 20 2018, 11:40) п... May 20 2018, 08:11 k155la3 Судя по осцилограмме - явный криминал.
В линию MIS... May 20 2018, 16:42 jcxz Цитата(k155la3 @ May 20 2018, 19:42) где ... May 20 2018, 16:53 Serge V Iz Да, вроде, в самом деле, ОК.
---
Тьфу, не тот обве... May 20 2018, 17:22
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|