Собственно здесь прикрепил проект для отладки STM3210E-EVAL от STM (STM32cube и IAR/KEIL). Косяк не зависит от проца,компилятра.
https://yadi.sk/d/0fjiGdpJfvD3aНиже я привожу код, который я сам писал, все остальное делает конфигуратор.
В конфигураторе настроил обработку 4 каналов Ацп и прерывание от дма после каждого цикла. Как видите - прерывание пустое. Как только включаю оцифровку - FAT даже не монтируется, о чем мигает светодиод :-) ! если у кого есть возможность посмотрите на код, а еще лучше - попробуйте.
CODE
/* USER CODE BEGIN 4 */
void LED(int state)
{
if (state)
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_6, GPIO_PIN_SET);
else
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_6, GPIO_PIN_RESET);
}
void Fault(int n)
{
while (1)
{
for (int i = 0; i<n; i++)
{
LED(1);
osDelay(50);
LED(0);
osDelay(150);
}
osDelay(1000);
}
}
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
/* NOTE : This function should not be modified. When the callback is needed,
function HAL_ADC_ConvCpltCallback must be implemented in the user file.
*/
}
/* USER CODE END 4 */
/* StartDefaultTask function */
void StartDefaultTask(void const * argument)
{
/* init code for FATFS */
MX_FATFS_Init();
/* USER CODE BEGIN 5 */
if (HAL_ADC_Start_DMA(&hadc1,\
(uint32_t *)aADCxConvertedValues,\
ADCCONVERTEDVALUES_BUFFER_SIZE\
) != HAL_OK)\
Fault(4); /* Start Error */
if (f_mount(&fs, SD_Path, 1) != FR_OK )
Fault(1);
/* Infinite loop */
for(;;)
{
FIL fp;
unsigned int ar;
char buff[10];
osDelay(1);
if (f_open(&fp, "test.txt", FA_READ) != FR_OK)
Fault(2);
if (f_read(&fp, buff, 10, &ar) != FR_OK || ar != 10)
Fault(3);
if (f_close(&fp) != FR_OK)
Fault(4);
}
/* USER CODE END 5 */
}