[elektro] STM32F103 SPI1 vs SPI2
uprogc .
uprogc at gmail.com
Tue Jan 16 10:17:28 CET 2018
A copy-paste-modify-val mindig ez a problema.
Ne ertsd felre:)
2018-01-16 11:13 GMT+02:00 Peter Peterb <peterb.list at gmail.com>:
> Ez most egyszerűen egy olyasmi helyzet volt, mint amikor ír az ember
> egy levelet és ha tízszer átolvassa, akkor se vesz észre benne egy
> elütést, de ha valaki más ránéz, az rögtön kiszúrja. A programban,
> amit fejlesztek, egy egyszerű SPI2 --> SPI1 konfig copy-paste-modify
> után így maradt benne ez az egy APB1 vs APB2. Megszívtam, tanultam
> ebből is, köszönöm a segítségeteket!
>
> Üdv,
> Péter
>
> elight <elight at gmail.hu> írta (2018. január 15. 17:06):
> > 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]
> >
> >
> > -----------------------------------------
> > elektro[-flame|-etc]
>
> -----------------------------------------
> elektro[-flame|-etc]
More information about the Elektro
mailing list