Fórum témák

» Több friss téma
Fórum » ARM - Miértek hogyanok
 
Témaindító: gtk, idő: Jún 26, 2007
Lapozás: OK   147 / 147
(#) cross51 válasza gtk hozzászólására (») Dec 13, 2019 /
 
Én most bele néztem a hal forráskódjába elvileg nem kell írnod semmi custom function-t mert a hal_spi tudja magától a 16 bitet, ha úgy initeled.
Annyit kell tenned, hogy az uint16_t* ptr-et átcastolod uint8_t* ra és HAL_SPI_Transmit size paraméterének a sizeof(uint16Tomb)/sizeof(uint16Tomb[0]) értéket adod meg.
(és persze arra figyelned kell, ha uint8_t* tömböt akarsz átvinni 16 bit-el akkor ennek a tömbnek 2 byte-os align-al kell lennie)

Amúgy én olyan aprócska eltérést találtam a HAL-hoz képest, hogy ott a TXDR-helyett DR-t használnak (de gondolom nem ez a ludas), és nem cast-olják a register-t 16 bites pointer-re hanem 32 bitesként írják, talán ez okozhatja a galibát.
(#) artur60 hozzászólása Feb 5, 2020 /
 
Sziasztok!

Nucleo L031K6-on próbálok am vevőről jeleket feldolgozni timer2 ch1-en.
Tesztnek gondoltam, hogy az egyik lábon csinálok 400us-os négyszög jeleket.
A timer2 ch1-en mérem időt Inputcatpure módban.
Megszakításban mőködik is rendesen, de ha DMA-val szeretném megoldani, akkor nem generálódik megszakítás élváltásra.
A kódot CubeMX-el generáltam.

timer2 init:
  1. TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  2.   TIM_MasterConfigTypeDef sMasterConfig = {0};
  3.   TIM_IC_InitTypeDef sConfigIC = {0};
  4.  
  5.   htim2.Instance = TIM2;
  6.   htim2.Init.Prescaler = 0;
  7.   htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  8.   htim2.Init.Period = 0xFFFF;
  9.   htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  10.   htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  11.   if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
  12.   {
  13.     Error_Handler();
  14.   }
  15.   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  16.   if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
  17.   {
  18.     Error_Handler();
  19.   }
  20.   if (HAL_TIM_IC_Init(&htim2) != HAL_OK)
  21.   {
  22.     Error_Handler();
  23.   }
  24.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  25.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  26.   if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
  27.   {
  28.     Error_Handler();
  29.   }
  30.   sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_BOTHEDGE;
  31.   sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
  32.   sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
  33.   sConfigIC.ICFilter = 0;
  34.   if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_1) != HAL_OK)
  35.   {
  36.     Error_Handler();
  37.   }

timer2 gpio és dma init
  1. /**TIM2 GPIO Configuration   
  2.     PA0-CK_IN     ------> TIM2_CH1
  3.     */
  4.     GPIO_InitStruct.Pin = RADIORX_Pin;
  5.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  6.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  7.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  8.     GPIO_InitStruct.Alternate = GPIO_AF2_TIM2;
  9.     HAL_GPIO_Init(RADIORX_GPIO_Port, &GPIO_InitStruct);
  10.  
  11.     /* TIM2 DMA Init */
  12.     /* TIM2_CH1 Init */
  13.     hdma_tim2_ch1.Instance = DMA1_Channel5;
  14.     hdma_tim2_ch1.Init.Request = DMA_REQUEST_8;
  15.     hdma_tim2_ch1.Init.Direction = DMA_PERIPH_TO_MEMORY;
  16.     hdma_tim2_ch1.Init.PeriphInc = DMA_PINC_DISABLE;
  17.     hdma_tim2_ch1.Init.MemInc = DMA_MINC_ENABLE;
  18.     hdma_tim2_ch1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
  19.     hdma_tim2_ch1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
  20.     hdma_tim2_ch1.Init.Mode = DMA_CIRCULAR;
  21.     hdma_tim2_ch1.Init.Priority = DMA_PRIORITY_LOW;
  22.     if (HAL_DMA_Init(&hdma_tim2_ch1) != HAL_OK)
  23.     {
  24.       Error_Handler();
  25.     }


main-ben dma start:
  1. if(HAL_TIM_IC_Start_DMA(&htim2, TIM_CHANNEL_1, (uint32_t*) captures, 2) != HAL_OK)
  2. {
  3.         Error_Handler();
  4. }


Van valakinek ötlete mi lehet a hiba?
Következő: »»   147 / 147
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu