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

 
 
> STM32F100C4 Remap SPI1 на пинах нет тактов., Есть ли у кого пример работающего алгоритма?
Basilij
сообщение Oct 14 2012, 21:25
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 175
Регистрация: 7-04-11
Пользователь №: 64 190



Здравствуйте господа!

Второй день бьюсь, со SPI1 в МК STM32F100C4... подключил AT25 к ножкам, PB3-5..
ремапил всё что только можно, порты Jtagi.. в общем все темы которые есть на данном форуме прочёл.. пробовал всё возможное
Не помогает. Осциллограф гласит что нет ничего на линиях.. кроме CS конечно же.

Единственное что заставляет задуматься так это строка из описания ремапа Джетага на порту PB3 - "Released only if not using asynchronous trace." Это полагаю гласит что нужно выбрать другой режим работы в:
/*!< SPI configuration */
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
?

Может есть где либо на просторах интернета нормальный работающий пример SPI1 на стандартных библиотеках периферии.. именно с ремапом на другие ножки.
На стандартных ножках на STM32L152 у меня работало всё. Ремап на 152 не пробовал. Столкнулся впервые на f100..
да хотябы для обзора и в виде регистров.


Заранее всем благодарен за потенциально возможные комментарии по данной проблеме.

Сообщение отредактировал Basilij - Oct 14 2012, 21:27
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Basilij
сообщение Oct 15 2012, 09:58
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 175
Регистрация: 7-04-11
Пользователь №: 64 190



Ниже привожу код. Может подскажете верна ли последовательность действий. Может чего либо не хватает.
Комбинировал последовательности всячески, осциллографом ничего не видно...
CODE
int main()
{
sFLASH_Init();
sFLASH_WriteEnable();
sFLASH_WriteBuffer(bufOutput,1,256);
sFLASH_ReadBuffer(bufInput,1,256);
}

void sFLASH_Init(void)
{
SPI_InitTypeDef SPI_InitStructure;
sFLASH_LowLevel_Init();
/*!< Deselect the FLASH: Chip Select high */
sFLASH_CS_HIGH();
/*!< SPI configuration */
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(sFLASH_SPI, &SPI_InitStructure);
/*!< Enable the sFLASH_SPI */
SPI_Cmd(sFLASH_SPI, ENABLE);
}

void sFLASH_LowLevel_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;

/*!< sFLASH_SPI_CS_GPIO, sFLASH_SPI_MOSI_GPIO, sFLASH_SPI_MISO_GPIO
and sFLASH_SPI_SCK_GPIO Periph clock enable */
RCC_APB2PeriphClockCmd(sFLASH_CS_GPIO_CLK | sFLASH_SPI_MOSI_GPIO_CLK | sFLASH_SPI_MISO_GPIO_CLK |
sFLASH_SPI_SCK_GPIO_CLK, ENABLE);
/*!< sFLASH_SPI Periph clock enable */
RCC_APB2PeriphClockCmd(sFLASH_SPI_CLK | RCC_APB2Periph_AFIO, ENABLE);

GPIO_PinRemapConfig(GPIO_Remap_SPI1,ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //выключаем JTAG, SW отстается включенным

/*!< Configure sFLASH_SPI pins: SCK */
GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_SCK_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(sFLASH_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);

/*!< Configure sFLASH_SPI pins: MOSI */
GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_MOSI_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(sFLASH_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);

/*!< Configure sFLASH_SPI pins: MISO */
GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_MISO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(sFLASH_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);

/*!< Configure sFLASH_CS_PIN pin: sFLASH Card CS pin */
GPIO_InitStructure.GPIO_Pin = sFLASH_CS_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(sFLASH_CS_GPIO_PORT, &GPIO_InitStructure);
}



CODE
void sFLASH_WriteEnable(void)
{
/*!< Select the FLASH: Chip Select low */
sFLASH_CS_LOW();

/*!< Send "Write Enable" instruction */
sFLASH_SendByte(sFLASH_CMD_WREN);

/*!< Deselect the FLASH: Chip Select high */
sFLASH_CS_HIGH();
}

uint8_t sFLASH_SendByte(uint8_t byte)
{
/*!< Loop while DR register in not emplty */
while (SPI_I2S_GetFlagStatus(sFLASH_SPI, SPI_I2S_FLAG_TXE) == RESET);

/*!< Send byte through the SPI1 peripheral */
SPI_I2S_SendData(sFLASH_SPI, byte);

/*!< Wait to receive a byte */
while (SPI_I2S_GetFlagStatus(sFLASH_SPI, SPI_I2S_FLAG_RXNE) == RESET);

/*!< Return the byte read from the SPI bus */
return SPI_I2S_ReceiveData(sFLASH_SPI);
}


Сообщение отредактировал IgorKossak - Oct 15 2012, 10:34
Причина редактирования: [codebox] для длинного кода!!!
Go to the top of the page
 
+Quote Post



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

 


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


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