[elektro] STM32F103 SPI1 vs SPI2

uprogc . uprogc at gmail.com
Mon Jan 15 16:55:00 CET 2018


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]


More information about the Elektro mailing list