Задать вопрос
rusyska55011
@rusyska55011

STM32. HardFault c флагом CFSR->IMPRECISERR на ровном месте?

Для управления пинами создал структуру и соответствующую функцию к ней:

Файл OutputPin.h
#include <stdint.h>
#include <stdbool.h>

#include "stm32f10x_gpio.h"

typedef struct outputPin {
	GPIO_TypeDef* bus;
	uint8_t pinNum;
	bool state;
} outputPin;

void OutputPin_SetState(outputPin* pin, bool state) {
	pin->bus->BSRR = (uint32_t)(
		0b1 << (pin->pinNum	+ (!state * 16))
	);
	
	pin->state = state;
}


Здесь я провожу инит всех моих структур:
H3.bus = GPIOA;
	H3.pinNum = 12;
	H3.state = READ_BIT(GPIOA->ODR, H3.pinNum);
	
	H1.bus = GPIOA;
	H1.pinNum = 11;
	H1.state = READ_BIT(GPIOA->ODR, H3.pinNum);
	
	H2.bus = GPIOA;
	H2.pinNum = 10;
	H2.state = READ_BIT(GPIOA->ODR, H3.pinNum);

	relay1.bus = GPIOB;
	relay1.pinNum = 9;
	relay1.state = READ_BIT(GPIOA->ODR, relay1.pinNum);
	
	relay2.bus = GPIOC;
	relay2.pinNum = 13;
	relay2.state = READ_BIT(GPIOA->ODR, relay1.pinNum);
	
	relay3.bus = GPIOC;
	relay3.pinNum = 14;
	relay3.state = READ_BIT(GPIOA->ODR, relay1.pinNum);
	
	relay4.bus = GPIOC;
	relay4.pinNum = 15;
	relay4.state = READ_BIT(GPIOA->ODR, relay1.pinNum);


В отдельной функции провожу какие-то манипуляции с моими структурами:
OutputPin_SetState(&H2, false);
	OutputPin_SetState(&H3, false);

	OutputPin_SetState(&H1, false); // На этом моменте косяк. Если удалю эту строчку, то все ОК
			
	OutputPin_SetState(&relay1, false);
	OutputPin_SetState(&relay2, false);
	OutputPin_SetState(&relay3, false);
	OutputPin_SetState(&relay4, false);


Все было хорошо. Однако проблема началась тогда, когда я начал писать другой файл для управления DS18B20. Интересна ситуация тем, что ошибка возникает именно тогда, когда я запихиваю в функцию переменную H1, и только из-за нее. То есть если я удалю строчку где я вставляю H1 в функцию, то программа будет работать нормально, и остальные структуры будут нормально работать с этой функцией!

Пошел смотреть что мне говорит МК: 662d13c21a62c455387501.png

Из источника (https://interrupt.memfault.com/blog/cortex-m-hardf...) понял, что бит CFSR->IMPRECISERR это неизвестная ошибка.
  • Вопрос задан
  • 158 просмотров
Подписаться 3 Простой 2 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы