Skocz do zawartości
m9ciek

[STM32] NucleoF103RB program działa tylko w debuggerze

Pomocna odpowiedź

Witam,

Napisałem program na moduł od adafruit CAP1188, wszystko działa poprawnie lecz tylko podczas trybu debug. Jeżeli odłączę zasilanie i ponownie je podłączę, program przestaje działać. Czym to możę być spowodowane? Brakiem jakiegoś początkowego resetu czy raczej problem z wewnętrznymi timerami? Poniżej dodaję kod programu, kod wygenerowany przez Cube pominąłem.

#include "main.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
#define CAP_SET_ADDRESS_POINTER 0x7D
#define CAP_READ 0x7F
#define CAP_WRITE 0x7E
#define CAP_RESET 0x7A
/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */

/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/
SPI_HandleTypeDef hspi1;

/* USER CODE BEGIN PV */

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_SPI1_Init(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

uint8_t spiData[7]; //testing
uint8_t ledData[4];
uint8_t touchData[4];
uint8_t resetData[2];

void reset_cap(){
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_9,GPIO_PIN_RESET);
	resetData[0] = CAP_RESET;
	resetData[1] = CAP_RESET;
	HAL_SPI_Transmit(&hspi1,resetData,2,10);
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_9,GPIO_PIN_SET);
}

void set_touch_sensitivity(){
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_9,GPIO_PIN_RESET);
	touchData[0]=CAP_SET_ADDRESS_POINTER;
	touchData[1]=0x1F;
	touchData[2]=CAP_WRITE;
	touchData[3]=0x7F; //0x6F - 2x multiplier almost the least sensitive
	HAL_SPI_Transmit(&hspi1,touchData,4,10);
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_9,GPIO_PIN_SET);
}

void connect_led_to_touch(){
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_9,GPIO_PIN_RESET);
	resetData[0] = CAP_RESET;
	resetData[1] = CAP_RESET;
	HAL_SPI_Transmit(&hspi1,resetData,2,10);
	ledData[0]=CAP_SET_ADDRESS_POINTER;
	ledData[1]=0x72;
	ledData[2]=CAP_WRITE;
	ledData[3]=0xff;
	HAL_SPI_Transmit(&hspi1,ledData,4,10);
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_9,GPIO_PIN_SET);
}

uint8_t diode_status(){
		  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_9,GPIO_PIN_RESET);
		  ledData[0]=CAP_SET_ADDRESS_POINTER;
		  ledData[1]=0x72;
		  ledData[2]=CAP_READ;
		  HAL_SPI_Transmit(&hspi1,ledData,3,10);
		  HAL_SPI_Receive(&hspi1,&spiData[3],1,10);
		  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_9,GPIO_PIN_SET);
		  return spiData[3];
	  }
/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */


  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_SPI1_Init();
  /* USER CODE BEGIN 2 */
  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,GPIO_PIN_SET);
  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,GPIO_PIN_RESET);

  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_9,GPIO_PIN_SET);
  HAL_Delay(10);
  reset_cap();
  set_touch_sensitivity();


  /* USER CODE END 2 */
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {

	connect_led_to_touch();
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

 

Udostępnij ten post


Link to post
Share on other sites

Sprawdź konfigurację pinu BOOT STMa 

  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...