Нет, все переискал...у меня мало опыта работы с контроллерами. Думаю срабатывает прерывание и происходит рассогласование по передаче. Могу предоставить исходный код.
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Думаю срабатывает прерывание и происходит рассогласование по передаче.
Вряд ли. Сработавшее прерывание таймера позволит лишь ошибиться на одну единицу времени, а это совсем не критично. Впрочем, лучше действительно приведите код проекта - вдруг ошибка легко обнаружится.
После перерыва наконец то заработал мой плеер. Вот видео работы
Программа пока очень сырая. Сделал буферизацию на влезло пока 65535 байт Хочу сделать кусочками хотя бы по 1 Кб или пока напрямую читать по байту с карты.
У меня вопрос как организовать пользовательский интерфейс, т.е. сделать отображение текущего блока и полоску оставшегося времени воспроизведения.
Добавлено after 2 minutes 21 second:
Код:
void TIM7_IRQHandler(void) { /* USER CODE BEGIN TIM7_IRQn 0 */
/* USER CODE END TIM7_IRQn 0 */ HAL_TIM_IRQHandler(&htim7); /* USER CODE BEGIN TIM7_IRQn 1 */ if (TapeOutMode==TAPE_OUT_STOP) { index16=16;//первоначальное значение бита byte =0;//первоначальное значение байта HAL_GPIO_WritePin(T_OUT_GPIO_Port, T_OUT_Pin, GPIO_PIN_RESET); return; } if (TapeOutVolume==true) { HAL_GPIO_WritePin(T_OUT_GPIO_Port, T_OUT_Pin, GPIO_PIN_RESET); TapeOutVolume=false; } else { HAL_GPIO_WritePin(T_OUT_GPIO_Port, T_OUT_Pin, GPIO_PIN_SET); TapeOutVolume=true; }
//выводим пилот-тон if (TapeOutMode==TAPE_OUT_LEAD) { TIM7->ARR = 2168*2;//начальное значение таймера if (tim6_countersec > 0) tim6_countersec--; else { tim6_countersec = 3223;//Время воспроизведения пилот тона 2 сек. TapeOutMode=TAPE_OUT_SYNCHRO_1; return; } }
//выводим синхросигнал 1 if (TapeOutMode==TAPE_OUT_SYNCHRO_1) { TIM7->ARR = 667;//начальное значение таймера TapeOutMode=TAPE_OUT_SYNCHRO_2; return; }
//выводим синхросигнал 2 if (TapeOutMode==TAPE_OUT_SYNCHRO_2){ TIM7->ARR = 735;//начальное значение таймера 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; //TapeOutMode=TAPE_OUT_PAUSE;//ставим паузу по оканчанию процесса //sz=FioNextHead();//читаем размер блока BytesCount = 0; return; } //byte=FioNextByte();//читаем байт из буфера byte=read_byte();//читаем байт из буфера index16=0;//первоначальное значение бита BytesCount++;//общий счетчик байт файла byte_temp = byte; } // printf("byte_temp %X\r\n", byte_temp); //выдаём бит if (byte&128) { TIM7->ARR = 1710*2;//начальное значение таймера //printf("bit%u =1 byte %u\r\n", index16,BytesCount); } else { TIM7->ARR = 855*2;//начальное значение таймера //printf("bit%u =0 byte %u\r\n", index16,BytesCount); } if ((index16%2)==1) byte<<=1; index16++; return; } /* USER CODE END TIM7_IRQn 1 */ }
Зависит от типа памяти (по SPi, I2C, параллельная). И, насколько я читал (но не точно), у STM бывает программные интерфейс для работы с некоторыми типами памяти.
Да, неверно задавал регистры. Сейчас использую все настройки через ARR Основной стоит делитель PSC 120 (тактовая 84МГц) До этого делал ARR=1 и частоту настраивал через PSC
Так же настроил уровень сигнала, слишком большой искажал форму. Это все в рамках эмулятора на ПК.
Добавлено after 1 minute: Думаю как паузу организовать и прокрутку блоков так как некоторые игры требуют остановки воспроизведения, либо выбор уровней.
da-nie, а что стряслось в тестом памяти в версии прошивки Firmware 2.2? Длится аж 15 минут.
Реально отсортировать файлы хотя бы по имени?
P.S. Вставляю пустую SD карту. Появляется Основное меню в котором выбираю пункт Магнитофон х1. Появляется сообщение "Нет файлов tap" и через пару секунд опять попадаю в Основное меню. На горячую меняю карту и ... все, более на кнопки магнитофон не реагирует. Так и должно быть или задумывалось, что сменим карту и будем работать дальше?
Запустил полностью свою версию плеера. Сделал перемотку вперед и назад, паузу и выход. Теперь все нужно тестировать на глюки. Хочу попробовать чтение tzx и запись реализовать.
Тест памяти был изменён - проверяется каждое значение байта (0-255). Просто кто-то жаловался на плавающие дефекты и сделал так.
Горячая замена карты не поддерживается.
tzx довольно сложный формат. И в общем, не нужный. А запись сделать можно (но потребуется игра с FAT). Я их не делал из-за общей бесполезности такого. Не припомню необходимости сохранять что-либо с ZX сейчас, за исключением файлов достижений от Elite. Но они мне не нужны.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения