[elektro] STM32F103 SPI1 vs SPI2
elight
elight at gmail.hu
Mon Jan 15 17:06:18 CET 2018
Nem hibáztattalak, és
nem bogarásztam át én sem,
csak elsőre arra gondolnék:
Hogy minden címet először egyeztetnék
Y = 1 és Y = 2 re is .. az adatlapban pontosan
sorról sorra
nem írtak e el valamilyen paramétert vagy indexet,
amelyik végzetes..
Ilyen tanuló pogramocskáknál gyártótól
függetlenül előfordulgat ilyesmi lazaság.
Hadd tanuljon (szívjon) az ember gyereke!
Pl rendre szok. olyat, hogy bitet lazán a port2
kettőn címzik pedig az a port1-en van. Stb..
Szóval a jól letesztel mintaprogram kincset ér! :-)
Üdv István
2018-01-15 16:55 keltezéssel, uprogc . írta:
> Csak 1re neztem na:)
>
> On Monday, January 15, 2018, elight <elight at gmail.hu> wrote:
>
>> Pointosabban mindenhol
>>
>> "SPIy" ahol y = 1 vagy 2 ...
>>
>> Üdv István
>>
>>
>>
>> 2018-01-15 16:26 keltezéssel, uprogc . írta:
>>
>>> *SPI1
>>>
>>> 2018-01-15 17:26 GMT+02:00 uprogc . <uprogc at gmail.com>:
>>>
>>> Talan SPI eseten:
>>>> RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> 2018-01-15 17:09 GMT+02:00 uprogc . <uprogc at gmail.com>:
>>>>
>>>> En ugyan nem olvastam vegig a kodot, de megfeleloen be van allitva az
>>>>> orajele az adott SPInek ?
>>>>>
>>>>> 2018-01-15 15:56 GMT+02:00 Peter Peterb <peterb.list at gmail.com>:
>>>>>
>>>>> Sziasztok,
>>>>>> Hátha van itt valaki, aki benne van a témában és szemet szúr neki
>>>>>> valami, ami nekem már végképp nem. Az alábbi teszt kód szerint az SPI2
>>>>>> működik ahogy kell, az SPI1 viszont rögtön végtelen ciklusba kerül a
>>>>>> TXE flag vizsgálatán. Ennek a reset utáni alapállapota 1, de a
>>>>>> debugger szerint az SPI1_SR=0, azaz a TXE bit is 0, mintha már lenne a
>>>>>> TX bufferben valami.
>>>>>> Ha ezt a vizsgálatot kihagyom, vagy ha a ...TXE == RESET helyett
>>>>>> ...BSY == SET van, akkor ugyan átmegy rajta, de akkor se csinál
>>>>>> semmit, a CLK és MOSI folyamatosan 0-n van. Sima GPIO-nak konfigurálva
>>>>>> piszkálhatók a lábak, tehát a chip kifelé rendben van.
>>>>>>
>>>>>> Üdv,
>>>>>> Péter
>>>>>>
>>>>>> #include "stm32f10x.h"
>>>>>> #include "stm32f10x_rcc.h"
>>>>>> #include "stm32f10x_gpio.h"
>>>>>> #include "stm32f10x.h"
>>>>>> #include "delay.h"
>>>>>>
>>>>>> //-----------------------------------------------------------------
>>>>>> #define TEST_SPI 1
>>>>>> //-----------------------------------------------------------------
>>>>>>
>>>>>> #if (TEST_SPI == 1)
>>>>>> #define SPIy SPI1
>>>>>> #define SPIy_CLK RCC_APB2Periph_SPI1
>>>>>> #define SPIy_GPIO GPIOA
>>>>>> #define SPIy_GPIO_CLK RCC_APB2Periph_GPIOA
>>>>>> #define SPIy_PIN_NSS GPIO_Pin_4
>>>>>> #define SPIy_PIN_SCK GPIO_Pin_5
>>>>>> #define SPIy_PIN_MISO GPIO_Pin_6
>>>>>> #define SPIy_PIN_MOSI GPIO_Pin_7
>>>>>>
>>>>>> #elif (TEST_SPI == 2)
>>>>>> #define SPIy SPI2
>>>>>> #define SPIy_CLK RCC_APB1Periph_SPI2
>>>>>> #define SPIy_GPIO GPIOB
>>>>>> #define SPIy_GPIO_CLK RCC_APB2Periph_GPIOB
>>>>>> #define SPIy_PIN_NSS GPIO_Pin_12
>>>>>> #define SPIy_PIN_SCK GPIO_Pin_13
>>>>>> #define SPIy_PIN_MISO GPIO_Pin_14
>>>>>> #define SPIy_PIN_MOSI GPIO_Pin_15
>>>>>>
>>>>>> #else
>>>>>> #error Not a valid SPI port number!
>>>>>> #endif
>>>>>>
>>>>>> int main(void)
>>>>>> {
>>>>>> SPI_InitTypeDef SPI_InitStructure;
>>>>>> GPIO_InitTypeDef GPIO_InitStructure;
>>>>>>
>>>>>> //---------------------------------------------------------
>>>>>> --------
>>>>>> // System clocks configuration
>>>>>> // First set flash latency:
>>>>>> // 0...24 MHz ---> 0
>>>>>> // 24...48 MHz ---> 1
>>>>>> // 48...72 MHz ---> 2
>>>>>> FLASH_SetLatency(FLASH_Latency_1);
>>>>>>
>>>>>> RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_9); // HSI, 36
>>>>>> MHz
>>>>>> RCC_PLLCmd(ENABLE); // Enable PLL
>>>>>> while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {} // Wait
>>>>>> till
>>>>>> PLL stable
>>>>>> RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
>>>>>>
>>>>>> RCC_HCLKConfig(RCC_SYSCLK_Div1);
>>>>>> RCC_PCLK1Config(RCC_HCLK_Div2);
>>>>>> RCC_PCLK2Config(RCC_HCLK_Div2);
>>>>>>
>>>>>> RCC_APB2PeriphClockCmd(SPIy_GPIO_CLK | RCC_APB2Periph_AFIO,
>>>>>> ENABLE); // Enable GPIO clock for SPIy
>>>>>> RCC_APB1PeriphClockCmd(SPIy_CLK, ENABLE); // Enable SPIy Periph
>>>>>> clock
>>>>>>
>>>>>> //---------------------------------------------------------
>>>>>> --------
>>>>>> // GPIO configuration
>>>>>> GPIO_InitStructure.GPIO_Pin = SPIy_PIN_SCK | SPIy_PIN_MOSI;
>>>>>> GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
>>>>>> GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
>>>>>> GPIO_Init(SPIy_GPIO, &GPIO_InitStructure);
>>>>>>
>>>>>> GPIO_InitStructure.GPIO_Pin = SPIy_PIN_MISO;
>>>>>> GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
>>>>>> GPIO_Init(SPIy_GPIO, &GPIO_InitStructure);
>>>>>>
>>>>>> GPIO_InitStructure.GPIO_Pin = SPIy_PIN_NSS;
>>>>>> GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
>>>>>> GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
>>>>>> GPIO_Init(SPIy_GPIO, &GPIO_InitStructure);
>>>>>>
>>>>>> //---------------------------------------------------------
>>>>>> --------
>>>>>> // SPIy configuration
>>>>>>
>>>>>> SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuple
>>>>>> x;
>>>>>> SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
>>>>>> SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
>>>>>> SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
>>>>>> SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
>>>>>> SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
>>>>>> SPI_InitStructure.SPI_BaudRatePrescaler =
>>>>>> SPI_BaudRatePrescaler_64;
>>>>>> SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
>>>>>> SPI_InitStructure.SPI_CRCPolynomial = 7;
>>>>>> SPI_Init(SPIy, &SPI_InitStructure);
>>>>>>
>>>>>> // Enable SPIy
>>>>>> SPI_Cmd(SPIy, ENABLE);
>>>>>>
>>>>>> //---------------------------------------------------------
>>>>>> --------
>>>>>> while (1)
>>>>>> {
>>>>>> GPIO_WriteBit(SPIy_GPIO, SPIy_PIN_NSS, 0);
>>>>>>
>>>>>> while (SPI_I2S_GetFlagStatus(SPIy, SPI_I2S_FLAG_TXE) ==
>>>>>> RESET); // Wait for SPIy Tx buffer empty
>>>>>> //while (SPI_I2S_GetFlagStatus(SPIy, SPI_I2S_FLAG_BSY) ==
>>>>>> SET); // Wait for SPIy ready
>>>>>> SPI_I2S_SendData(SPIy, 0x82); // Send SPIy test databyte
>>>>>>
>>>>>> GPIO_WriteBit(SPIy_GPIO, SPIy_PIN_NSS, 1);
>>>>>> Delay_ms(100);
>>>>>> }
>>>>>> }
>>>>>>
>>>>>> -----------------------------------------
>>>>>> elektro[-flame|-etc]
>>>>>>
>>>>>
>>>>> -----------------------------------------
>>> elektro[-flame|-etc]
>>>
>> -----------------------------------------
>> elektro[-flame|-etc]
> -----------------------------------------
> elektro[-flame|-etc]
More information about the Elektro
mailing list