23.01.2014, 15:27
|
|
Гражданин KAZUS.RU
Регистрация: 01.09.2007
Сообщений: 898
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
|
Kiel 5.0 и его библиотеки (SPI)
Микроконтроллер STM32F415 Keil 5.0 . Пытаюсь запустить SPI2 с ихними библиотеками...... Не выходит каменный цветок. RTE_Device.h (Startup) все выставлено.
В Manage Run - Time Environment
Стоят галочки SPI в drivers и DMA в Device.
Debug ом (Эмуляцией) смотрю заходит в функции SPI2. Но на железе увы не работает....
Я только начал с STM разбираться, так что не пинайте.
Код:
|
переменные
extern ARM_DRIVER_SPI Driver_SPI2;
//ARM_DRIVER_SPI ARM_Driver_SPI2;
ARM_DRIVER_SPI *drv_info;
ARM_SPI_CAPABILITIES drv_capabilities;
ARM_DRV_VERSION version;
в майне
GPIOB -›MODER|=
GPIO_MODER_MODER4_0 |
GPIO_MODER_MODER5_0 |
GPIO_MODER_MODER12_0 |
GPIO_MODER_MODER13_0 |
GPIO_MODER_MODER14_0 |
GPIO_MODER_MODER15_0; //
GPIOB -›OSPEEDR |=
GPIO_OSPEEDER_OSPEEDR4_1 |
GPIO_OSPEEDER_OSPEEDR5_1 |
GPIO_OSPEEDER_OSPEEDR12_1 |
GPIO_OSPEEDER_OSPEEDR13_1 |
GPIO_OSPEEDER_OSPEEDR14_1 |
GPIO_OSPEEDER_OSPEEDR15_1 ;
drv_info = &Driver_SPI2;
drv_capabilities = drv_info-›GetCapabilities ();
version = drv_info-›GetVersion();
drv_info-›Initialize(NULL);
drv_info-›PowerControl(ARM_POWER_FULL);
while(1)
{
drv_info-›TransferByte(100);
} |
|
|
|
|
24.01.2014, 15:08
|
|
Гражданин KAZUS.RU
Регистрация: 01.09.2007
Сообщений: 898
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
|
Re: Kiel 5.0 и его библиотеки (SPI)
Принт скрин с wizarda divice.h
|
|
|
|
24.01.2014, 15:27
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Kiel 5.0 и его библиотеки (SPI)
bass1981, Создай проект , как я раньше описывал,
с минимумом компонентов :
system, startup и хэдеры , но только без визарда .
__________________
Осторожно , злой кот
|
|
|
|
24.01.2014, 15:51
|
|
Гражданин KAZUS.RU
Регистрация: 01.09.2007
Сообщений: 898
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
|
Re: Kiel 5.0 и его библиотеки (SPI)
Сообщение от dosikus
|
bass1981, Создай проект , как я раньше описывал,
с минимумом компонентов :
system, startup и хэдеры , но только без визарда .
|
OK... Сейчас.....
|
|
|
|
24.01.2014, 20:15
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Kiel 5.0 и его библиотеки (SPI)
И так, плата все та же mini-M4 на STM32F415RG.
Смотрим в даташит - доступны 3 SPI в перемешку с 2мя I2S .
Далее в Table 9. Alternate function mappin
ищем где висит каждый SPI и заодно на какой AF, сверяя с доступными нам пинами платы.
Ну и первое что попало :
SPI1 PA4-PA7 AF5 .
Далее смотрим Figure 5. STM32F41x block diagram:
SPI1 тактируется от APB2 .
Далее:
2.2.24 Serial peripheral interface (SPI)
Цитата:
|
The STM32F41x feature up to three SPIs in slave and master modes in full-duplex and
simplex communication modes. SPI1 can communicate at up to 42 Mbits/s, SPI2 and SPI3
can communicate at up to 21 Mbit/s. The 3-bit prescaler gives 8 master mode frequencies
and the frame is configurable to 8 bits or 16bits. The hardware CRC generation/verification
supports basic SD Card/MMC modes. All SPIs can be served by the DMA controller.
The SPI interface can be configured to operate in TI mode for communications in master
mode and slave mode.
|
Теперь открываем Referense manual на F4 RM0090.
8.3.2 I/O pin multiplexer and mapping
• Peripheral alternate function
Цитата:
|
For the ADC and DAC, configure the desired I/O as analog in the GPIOx_MODER
register.
For other peripherals:
– Configure the desired I/O as an alternate function in the GPIOx_MODER register
– Select the type, pull-up/pull-down andoutput speed via the GPIOx_OTYPER,
GPIOx_PUPDR and GPIOx_OSPEEDERregisters, respectively
– Connect the I/O to the desired AFx inthe GPIOx_AFRL or GPIOx_AFRH register
|
Для ADC и DAC пины конфигурируются как аналоговые .
Для другое периферии :
- как альтернативная функция.
- пуллап,пулдаун и скорость добавлять по вкусу.
- выбрать соответствующую конфигурацию AFx в регистрах GPIOx_AFRL или GPIOx_AFRL.
И так пины PA5-PA7 конфигурируем как AF, без пуллап/пуддаун, скорость на данный момент роли не играет. Для этих пинов - выбираем AF5 .
Пин PA4 сделаем как выход с паш_пул, почему потом объясню.
Как все сие сделать разбирали в прошлый раз для UART.
https://kazus.ru/forums/showthread.php?t=106278
Как сделаешь, отпишись и код конфигурации пинов здесь выложи .
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 25.01.2014 в 10:55.
|
|
|
Сказали "Спасибо" dosikus
|
|
|
24.01.2014, 21:01
|
|
Гражданин KAZUS.RU
Регистрация: 01.09.2007
Сообщений: 898
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
|
Re: Kiel 5.0 и его библиотеки (SPI)
Код:
|
void SPI_Init(void)
{
RCC-›AHB1ENR |=RCC_AHB1ENR_GPIOAEN;//Разрешаем тактирование порта А
GPIOA-›MODER |= GPIO_MODER_MODER4_1 |
GPIO_MODER_MODER5_1 |
GPIO_MODER_MODER6_1 |
GPIO_MODER_MODER7_1 ; //PA4-7 - выход AF
GPIOA-›OTYPER &= ~GPIO_OTYPER_OT_4; //PA4 - выход push-pull
GPIOA-›OSPEEDR |= GPIO_OSPEEDER_OSPEEDR4 |
GPIO_OSPEEDER_OSPEEDR5 |
GPIO_OSPEEDER_OSPEEDR6 |
GPIO_OSPEEDER_OSPEEDR7 ; //PA4-7 - скорость 40 МГц
GPIOA-›AFR[0] |= (5‹‹(4*5))|(5‹‹(4*6))|(5‹‹(4*7)); // AF5 for
} |
Както так.... Но чувствую много чего здесь не правильно.
|
|
|
|
25.01.2014, 01:01
|
|
Гражданин KAZUS.RU
Регистрация: 01.09.2007
Сообщений: 898
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
|
Re: Kiel 5.0 и его библиотеки (SPI)
Код:
|
#define Set_CS GPIOA-›BSRRH = GPIO_BSRR_BS_4
#define UNSet_CS GPIOA-›BSRRL = GPIO_BSRR_BS_4
void SPI_Init2(void)
{
// Порт А AF на 5-6-7 ноге
RCC-›AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
GPIOA-›MODER |= GPIO_MODER_MODER4_0 | GPIO_MODER_MODER5_1 | GPIO_MODER_MODER6_1 | GPIO_MODER_MODER7_1;
GPIOA-›OTYPER &= ~(GPIO_OTYPER_OT_4 | GPIO_OTYPER_OT_5 | GPIO_OTYPER_OT_7);
GPIOA-›OTYPER |= GPIO_OTYPER_OT_6;
GPIOA-›OSPEEDR |= GPIO_OSPEEDER_OSPEEDR4_0 | GPIO_OSPEEDER_OSPEEDR5_0 | GPIO_OSPEEDER_OSPEEDR6_0 | GPIO_OSPEEDER_OSPEEDR7_0;
GPIOA-›PUPDR &= ~(GPIO_PUPDR_PUPDR5 | GPIO_PUPDR_PUPDR7);
GPIOA-›PUPDR |= GPIO_BSRR_BS_4 | GPIO_PUPDR_PUPDR6_1;
GPIOA-›AFR[0] |= (5 ‹‹ 4*5) | (5 ‹‹ 4*6) | (5 ‹‹ 4*7);
RCC-›APB2ENR |= RCC_APB2ENR_SPI1EN;
SPI1-›CR1 |= SPI_CR1_CPOL | SPI_CR1_CPHA;
SPI1-›CR1 |= SPI_CR1_BR_1 | SPI_CR1_BR_0;
SPI1-›CR1 |= SPI_CR1_SSM | SPI_CR1_SSI;
SPI1-›CR1 |= SPI_CR1_SPE | SPI_CR1_MSTR;
UNSet_CS ;
return;
}
int main(void) {
SysTick_Config(SystemCoreClock / 1000);
SPI_Init2();
while (1)
{
Set_CS ;
SPI1-›DR = 123;
//while (!(SPI1-›SR & SPI_SR_RXNE));
//spi_res = SPI1-›DR;
UNSet_CS ;
Delay_mS(500);
}
} |
Все засыпаю. вроде конфигурацию портов выставил правильно...
|
|
|
|
25.01.2014, 01:02
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Kiel 5.0 и его библиотеки (SPI)
bass1981, Ок завтра проверю. Счас так же засыпаю.
__________________
Осторожно , злой кот
|
|
|
|
25.01.2014, 12:28
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Kiel 5.0 и его библиотеки (SPI)
Извиняюсь за задержку.
И так :
Код:
|
void SPI1_init(void)
{
RCC-›AHB1ENR |=RCC_AHB1ENR_GPIOAEN ;
RCC-›APB2ENR |=RCC_APB2ENR_SPI1EN ;
GPIOA-›MODER &= ~
(GPIO_MODER_MODER4 |
GPIO_MODER_MODER5 |
GPIO_MODER_MODER6 |
GPIO_MODER_MODER7
);
GPIOA-›MODER |=
GPIO_MODER_MODER4_0 |
GPIO_MODER_MODER5_1 |
GPIO_MODER_MODER6_1 |
GPIO_MODER_MODER7_1
;
GPIOA-›OTYPER &= ~
(GPIO_OTYPER_OT_4 |
GPIO_OTYPER_OT_5 |
GPIO_OTYPER_OT_6 |
GPIO_OTYPER_OT_7
);
GPIOA-›OSPEEDR &= ~
(GPIO_OSPEEDER_OSPEEDR4 |
GPIO_OSPEEDER_OSPEEDR5 |
GPIO_OSPEEDER_OSPEEDR6 |
GPIO_OSPEEDER_OSPEEDR7
);
GPIOA-›OSPEEDR |=
GPIO_OSPEEDER_OSPEEDR4_0 |
GPIO_OSPEEDER_OSPEEDR5_0 |
GPIO_OSPEEDER_OSPEEDR6_0 |
GPIO_OSPEEDER_OSPEEDR7_0
;
GPIOA-›PUPDR &= ~
(GPIO_PUPDR_PUPDR4 |
GPIO_PUPDR_PUPDR5 |
GPIO_PUPDR_PUPDR6 |
GPIO_PUPDR_PUPDR7);
GPIOA-›AFR[0] |= (5 ‹‹ 4*5) | (5 ‹‹ 4*6) | (5 ‹‹ 4*7);
SPI1-›CR1 |=
SPI_CR1_BR_0 | //
SPI_CR1_BR_1 |
SPI_CR1_BR_2 |
SPI_CR1_MSTR |
SPI_CR1_SSI |
SPI_CR1_SSM
;
SPI1-›CR1 |= SPI_CR1_SPE;
} |
И комментарии:
При конфигурации пинов, да и регистров вообще, лучше не уповать на значения по умолчанию.
И так сначала трем биты потом ставим .
OD режим для SPI - не нужен . Pullup пока так же .
Код:
|
uint8_t SPI1_send(uint8_t data)
{
SPI1-›DR=data;
while(!(SPI1-›SR & SPI_SR_RXNE)){}
return SPI1-›DR;
} |
Передача и прием .
Сразу - это лишь демонстрационный вариант и вариант не лучший , передача одиночных байт .
С многими девайсами можно работать потоком не дергая CS .
Но, так как девайс не озвучен , пока тестим на "кошках"
Код:
|
while(1)
{
CS_Off;
SPI1_send(0x55);
CS_On;
Delay_mS(10);
} |
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 25.01.2014 в 12:31.
|
|
|
Сказали "Спасибо" dosikus
|
|
|
25.01.2014, 17:58
|
|
Гражданин KAZUS.RU
Регистрация: 01.09.2007
Сообщений: 898
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
|
Re: Kiel 5.0 и его библиотеки (SPI)
dosikus тебе не за что извиняться, как смог так смог... Огромное спасибо что помогаешь.....
Все разобрался с ремепом. Попробую на других ножках запустить.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:52.
|
|