Sida 79 av 81

Re: Förslag på PWM, ADC, I/O och DAC IC kretsar med SPI?

Postat: 16 juni 2021, 21:00:28
av Rick81
Jag tycker det låter som du inte nollställer interuptflaggan i interuptet, då kommer det köras hela tiden

Re: Förslag på PWM, ADC, I/O och DAC IC kretsar med SPI?

Postat: 16 juni 2021, 21:01:17
av sodjan
Idiotisk fråga, men... Har TS_IRQ_Pin pull up eller down?
Vad har GPIO_Pin för input? Om inget, finns det pull up eller down?

Re: Förslag på PWM, ADC, I/O och DAC IC kretsar med SPI?

Postat: 16 juni 2021, 23:19:00
av ToPNoTCH
Rick81 skrev: 16 juni 2021, 21:00:28 Jag tycker det låter som du inte nollställer interuptflaggan i interuptet, då kommer det köras hela tiden
Den automatgenererade koden i CubeMX har en inbyggd clear funktion.
Men nu när du nämnde det så konstaterar jag att TS har gjort våld på den, så det du säger stämmer vad jag kan se.

Jag trodde TS förstod det rudimentära med CubeMX, att man bara skev kod mellan

Kod: Markera allt

/* USER CODE BEGIN */

/* USER CODE END  */
och inte tar bort i övrigt.

Så verkar det inte vara.

Re: Förslag på PWM, ADC, I/O och DAC IC kretsar med SPI?

Postat: 16 juni 2021, 23:22:31
av DanielM
Rick81 skrev: 16 juni 2021, 21:00:28 Jag tycker det låter som du inte nollställer interuptflaggan i interuptet, då kommer det köras hela tiden
Jasså? Hur då nollställa? Den där flaggan är inte för interrupt.
ToPNoTCH skrev: 16 juni 2021, 23:19:00
Rick81 skrev: 16 juni 2021, 21:00:28 Jag tycker det låter som du inte nollställer interuptflaggan i interuptet, då kommer det köras hela tiden
Den automatgenererade koden i CubeMX har en inbyggd clear funktion.
Men nu när du nämnde det så konstaterar jag att TS har gjort våld på den, så det du säger stämmer vad jag kan se.

Jag trodde TS förstod det rudimentära med CubeMX, att man bara skev kod mellan

Kod: Markera allt

/* USER CODE BEGIN */

/* USER CODE END  */
och inte tar bort i övrigt.

Så verkar det inte vara.
Min kod är mellan user begin och user end. Alla interrupt-funktioner i STM32 har datatypen __weak. Alltså man skriver över funktionen med andra ord.
sodjan skrev: 16 juni 2021, 21:01:17 Idiotisk fråga, men... Har TS_IRQ_Pin pull up eller down?
Vad har GPIO_Pin för input? Om inget, finns det pull up eller down?
Gpio_Pin är bara en variabel som ett argument. Beroende på vilken pinne som har interrupt, så anropas funktionen med ett unikt interrupt. Mycket smart av ST.

Re: Förslag på PWM, ADC, I/O och DAC IC kretsar med SPI?

Postat: 16 juni 2021, 23:46:57
av ToPNoTCH
Om du skriver över funktionen (istället för att lägga till i befintliga "USER CODE") så behöver du veta vad som skall göras. Exempelvis i ditt fall cleara interrupt flaggan.

Gör om med ett blank projekt med en enda pinne med extern interrupt, och kolla den automat generade koden igen följ den hela vägen så kommer det klarna.
I "stm32f_xx_it.h" så framgår det vilken rutin som kopplas till den interrupt-lina som den valda pinnen ligger på.

Du kommer se att det slutar med ett anrop som rensar flaggan.
Ex.

Kod: Markera allt

/**
  * @brief  This function handles EXTI interrupt request.
  * @param  GPIO_Pin: Specifies the pins connected EXTI line
  * @retval None
  */
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
{
  /* EXTI line interrupt detected */
  if (__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != 0x00u)
  {
    __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
    HAL_GPIO_EXTI_Callback(GPIO_Pin);
  }
}
Och du kommer se vart du skall lägga din kod för att inte sabba det.

Re: Förslag på PWM, ADC, I/O och DAC IC kretsar med SPI?

Postat: 17 juni 2021, 00:12:31
av DanielM
Fast USER CODE är bara till för att placera koden där CubeMX ej skriver över.
Tanken med __weak är att man ska skriva över funktionen.

Ja. Detta anrop anropas, men trots ändå så anropas min interrupt igen.

Re: Förslag på PWM, ADC, I/O och DAC IC kretsar med SPI?

Postat: 17 juni 2021, 13:30:57
av Rick81
__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin) var inte med i den första koden du skickade, har du lagt till det nu?

Re: Förslag på PWM, ADC, I/O och DAC IC kretsar med SPI?

Postat: 17 juni 2021, 13:41:10
av DanielM
Detta måste jag dubbelkolla!

Edit: Ja den fanns med när jag aktiverade NVIC.

Kod: Markera allt

void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
{
  /* EXTI line interrupt detected */
  if(__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != 0x00u)
  {
    __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
    HAL_GPIO_EXTI_Callback(GPIO_Pin);
  }
}

Re: Förslag på PWM, ADC, I/O och DAC IC kretsar med SPI?

Postat: 17 juni 2021, 20:47:03
av Mr Andersson
Använder du edge- eller level-trigger?
Om det är level måste du förmodligen säga åt din externa enhet att sluta dra linjen låg.

Re: Förslag på PWM, ADC, I/O och DAC IC kretsar med SPI?

Postat: 17 juni 2021, 21:24:47
av DanielM
Jag har edge high->low.

Men jag skulle nog tro att SPI funktionen och NVIC(interrupt) gillar inte varandra.

Det fungerar utmärkt att läsa utav pinnen manuellt annars utan interrupt.

Re: Förslag på PWM, ADC, I/O och DAC IC kretsar med SPI?

Postat: 20 juni 2021, 22:11:25
av DanielM
Har ni varit med om detta någon gång? När ni passerar en stor uint8_t plot[1584] igenom denna funktion.

Kod: Markera allt

void test_func(uint8_t plot[]){
	return;
}
Då fungerar det OK om funktionen befinner sig i main.c där uint8_t plot[1584] deklareras.
Men om funktionen void test_func(uint8_t plot[]) befinner sig i en annan .c fil och importeras via en annan .h header fil. Då får jag hardfault på något helt annat ställe som har inget med funktionen att göra.

I detta fall så får jag hardfault när jag deklarerar USB funktionen i STM32CubeIDE. :humm:
När jag lämnar denna funktion.

Kod: Markera allt

HAL_StatusTypeDef HAL_PCD_Init(PCD_HandleTypeDef *hpcd)

Re: Förslag på PWM, ADC, I/O och DAC IC kretsar med SPI?

Postat: 20 juni 2021, 22:27:51
av sodjan
Fungerar det för en (mycket) lägre storlek än [1584]?
*Om* det gör det så har du kanske svaret där...

Re: Förslag på PWM, ADC, I/O och DAC IC kretsar med SPI?

Postat: 20 juni 2021, 22:30:51
av Klas-Kenny
När du skickar in arrayen i en funktion sådär så landar den på stacken.
Förmodligen är din stack inte stor nog för det, så den börjar skriva in på redan använda minnesplatser (utanför stacken).

Re: Förslag på PWM, ADC, I/O och DAC IC kretsar med SPI?

Postat: 20 juni 2021, 22:42:54
av DanielM
sodjan skrev: 20 juni 2021, 22:27:51 Fungerar det för en (mycket) lägre storlek än [1584]?
*Om* det gör det så har du kanske svaret där...
Om jag lägger mig på 1320 så fungerar det. Då får jag inte hardfault.

Re: Förslag på PWM, ADC, I/O och DAC IC kretsar med SPI?

Postat: 20 juni 2021, 22:47:05
av DanielM
Klas-Kenny skrev: 20 juni 2021, 22:30:51 När du skickar in arrayen i en funktion sådär så landar den på stacken.
Förmodligen är din stack inte stor nog för det, så den börjar skriva in på redan använda minnesplatser (utanför stacken).
Jag misstänker detta. Jag tyckter att jag har mycket minne kvar att jobba med.
Skärmklipp.PNG
Skärmklipp.PNG