Привет! Можете помочь с SD-картой на STM32F4? На SD я писать понял как, - взял пример microtechnics. Но вот не пойму почему у меня не работает это из прерываний... Я каждые 6 мкс попадаю в прерывания где оцифровываю сигнал и пытаюсь его записать на SD и так 4000000 раз.
В майне я создаю на SD файл:
FATFS fileSystem;
FIL testFile;
UINT testBytes;
FRESULT res;
if(f_mount(&fileSystem, SD_Path, 1) == FR_OK)
{
uint8_t path[13] = "testfile.txt";
path[12] = '';
res = f_open(&testFile, (char*)path, FA_WRITE | FA_CREATE_ALWAYS);
}
И открываю его, а потом в прерывании пытаюсь в него записать оцифрованные значения, и после 4000000 раз закрыть его.
if(t<4000000) //
{
ADC1->SR=0;
ADC1->CR2|=ADC_CR2_SWSTART;
UserData=ADC1->DR;
res = f_write(&testFile, UserData, 2, &testBytes);
}
else
{
res = f_close(&testFile);
}
Что я делаю не так? Я просто не когда раньше не работал с флешкой...
Так может лучше значения в буфер писать, а потом за один раз в файл. Возможно функция записи одного значения длится дольше 6 мкс, да и вообще, из прерывания лучше не вызывать функцию, генерирующую другое прерывание.
И переменная t какой тип имеет?
Я сделал глобальную переменную pr;
Сделал вот так в прерывание:
void TIM2_IRQHandler(void)
{
/* USER CODE BEGIN TIM2_IRQn 0 */
/* USER CODE END TIM2_IRQn 0 */
HAL_TIM_IRQHandler(&htim2);
/* USER CODE BEGIN TIM2_IRQn 1 */
pr=1;
/* USER CODE END TIM2_IRQn 1 */
}
И в main.c
extern int pr;
int t=0;
while (1)
{
if (pr==1)
{
if(t<4000000) //
{
t++;
ADC1->SR=0;
ADC1->CR2|=ADC_CR2_SWSTART;
UserData=ADC1->DR;
array[0]=UserData >> 8;
array[1]=UserData;
res = f_write(&testFile, array, 2, &testBytes);
pr=0;
}
else
{
res = f_close(&testFile);
}
}
}