-
Это обработчик прерывания таймера 6
Код:
void TIM6_DAC_IRQHandler(void)
{
/* USER CODE BEGIN TIM6_DAC_IRQn 0 */
/* USER CODE END TIM6_DAC_IRQn 0 */
HAL_TIM_IRQHandler(&htim6);
/* USER CODE BEGIN TIM6_DAC_IRQn 1 */
if (TapeOutMode==TAPE_OUT_STOP)
{
HAL_GPIO_WritePin(GPIOD, LD6_Pin, GPIO_PIN_RESET);
return;
}
if (TapeOutVolume==true)
{
HAL_GPIO_WritePin(GPIOD, LD6_Pin, GPIO_PIN_RESET);
TapeOutVolume=false;
}
else
{
HAL_GPIO_WritePin(GPIOD, LD6_Pin, GPIO_PIN_SET);
TapeOutVolume=true;
}
//выводим пилот-тон
if (TapeOutMode==TAPE_OUT_LEAD)
{
TIM6->PSC = 13011;//начальное значение таймера
if (tim6_countersec > 0) tim6_countersec--;
else
{
tim6_countersec = 3223;
TapeOutMode=TAPE_OUT_SYNCHRO_1;
return;
}
}
//выводим синхросигнал 1
if (TapeOutMode==TAPE_OUT_SYNCHRO_1)
{
TIM6->PSC =4050;//начальное значение таймера
TapeOutMode=TAPE_OUT_SYNCHRO_2;
return;
}
//выводим синхросигнал 2
if (TapeOutMode==TAPE_OUT_SYNCHRO_2)
{
TIM6->PSC = 4420;//начальное значение таймера
TapeOutMode=TAPE_OUT_DATA;
index16=16;
byte=0;
BytesCount=0;//обнуляем счетчик байт
return;
}
//передаём данные
if (TapeOutMode==TAPE_OUT_DATA)
{
if (index16>=16)
{
if (BytesCount>=sz)
{
TapeOutMode=TAPE_OUT_STOP;
BytesCount = 0;
return;
}
byte=FioNextByte();//читаем байт из буфера
byte_temp = byte;
index16=0;//первоначальное значение бита
BytesCount++;//общий счетчик байт файла
}
//выдаём бит
if (byte&128) {
TIM6->PSC = 10265;//начальное значение таймера
}
else {
TIM6->PSC = 5132;//начальное значение таймера
}
if ((index16%2)==1) byte<<=1;
index16++;
return;
}
}
-
TIMx->PSC это прескалер. Почему оно подписано как "начальное значение" если сам таймер это TIMx->CNT?
-
Сам таймер 6 у меня настроен на 42 000 000 Гц
42 000 000 / 13011 = 3228,0378141572515563753746829606
3228,0378141572515563753746829606 / 4 = 807,00945353931288909384367074014
получаем частоту пилот тона
-
Хорошо. Какое событие ты используешь и чему равен ARR регистр? Да и хотелось бы выяснить режим таймера в целом.
-
CubeMX Настройки таймера
http://img.radiokot.ru/files/104486/...1endgxt22c.jpg
- - - Добавлено - - -
http://img.radiokot.ru/files/104486/...1endioe48o.jpg
Все прерывания
http://img.radiokot.ru/files/104486/...1endmv1aci.jpg
- - - Добавлено - - -
Код:
/* TIM6 init function */
void MX_TIM6_Init(void)
{
TIM_MasterConfigTypeDef sMasterConfig;
htim6.Instance = TIM6;
htim6.Init.Prescaler = 120;
htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
htim6.Init.Period = 1;
HAL_TIM_Base_Init(&htim6);
sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
HAL_TIMEx_MasterConfigSynchronization(&htim6, &sMasterConfig);
}
-
На днях провел тестирование своей поделки, успешно заработала!
Загрузка tap файлов работает.
Пока тестирую на эмуляторе Spectaculator
загрузка через линейный вход звуковой карты.
https://youtu.be/Qi37Imy5Sy0
-
Плохо смотреть вертикальное видео.
-
-
Кто подключал внешнюю статическую память к STM32?
-