Перейти к содержанию
    

mihlit1

Участник
  • Постов

    46
  • Зарегистрирован

  • Посещение

Весь контент mihlit1


  1. Долго ломал голову почему энкодер выдает 2 тика на щелчок. Нашлись люди добрые, объяснили. Есть энкодеры EC11 и E12 (мне попадались). Так вот, один из них выдает 2 тика на щелчок, другой тип - 1 тик на щелчок.
  2. Есть целый раздел электротехники - двигатели постоянного тока. Скорее всего у Вас двигатель с последовательным возбуждением - у них при уменьшении тока возбуждения растут обороты. Подробнее - см. Теория электропривода (есть такой раздел).
  3. stm32f303cct6, CubeIDE 1.6.1 Где то накосячил, не получается переключится из ADC1_TIM3 в DualMode. ТКНИТЕ НОСОМ!!! //------------------------------------ void ADC1_TIM3(void) { //HAL_ADC_Stop(&hadc2); ADC1->CR |= ADC_CR_ADSTP; // ADC stop conversion while (ADC1->CR & ADC_CR_ADSTART) {} // wait till ADC stop work ADC2->CR |= ADC_CR_ADSTP; while (ADC2->CR & ADC_CR_ADSTART) {} ADC1->CR |= ADC_CR_ADDIS; // ADC disable while (ADC1->CR & ADC_CR_ADEN) {} ADC2->CR |= ADC_CR_ADDIS; while (ADC2->CR & ADC_CR_ADEN) {} //ADC1->CFGR = 0x1511; ADC1->CFGR = 0; ADC1->CFGR |= ADC_CFGR_OVRMOD; ADC1->CFGR |= ADC_CFGR_DMAEN; ADC1->CFGR |= ADC_CFGR_EXTEN_0; ADC1->CFGR |= ADC_RESOLUTION_8B; ADC1->CFGR |= ADC_CFGR_EXTSEL_2; ADC2->CFGR = 0; DMA1_Channel1->CCR &= ~DMA_CCR_EN; //DMA disable while (DMA1_Channel1->CCR & DMA_CCR_EN) {} // wait DMA1_Channel1->CNDTR = 0x400; DMA1_Channel1->CPAR = 0x50000040; DMA1_Channel1->CMAR = (uint32_t)&buf_adc; DMA1->IFCR = 0xFFFFFFFF; //DMA1_Channel1->CCR = 0x8E; DMA1_Channel1->CCR = 0; DMA1_Channel1->CCR |= DMA_CCR_HTIE; DMA1_Channel1->CCR |= DMA_CCR_MINC; DMA1_Channel1->CCR |= DMA_CCR_TCIE; DMA1_Channel1->CCR |= DMA_CCR_TEIE; DMA1_Channel1->CCR |= DMA_CCR_EN; //DMA enable ADC1->CR |= ADC_CR_ADEN; // enable the ADC ADC1->CR |= ADC_CR_ADSTART; // start ADC conversion } //------------------------------------ void DualMode(void) { ADC1->CR |= ADC_CR_ADSTP; // ADC stop conversion while (ADC1->CR & ADC_CR_ADSTART) {} // wait till ADC stop work ADC2->CR |= ADC_CR_ADSTP; while (ADC2->CR & ADC_CR_ADSTART) {} ADC1->CR |= ADC_CR_ADDIS; // ADC disable while (ADC1->CR & ADC_CR_ADEN) {} ADC2->CR |= ADC_CR_ADDIS; while (ADC2->CR & ADC_CR_ADEN) {} //ADC1->CFGR = 0x3010; ADC1->CFGR = 0; ADC1->CFGR |= ADC_CFGR_OVRMOD; ADC1->CFGR |= ADC_RESOLUTION_8B; ADC1->CFGR |= ADC_CFGR_CONT; ADC2->CFGR = 0x3010; //ADC1_2_COMMON->CCR = 0x1C407; ADC1_2_COMMON->CCR = 0; ADC1_2_COMMON->CCR |= ADC_CCR_CKMODE; ADC1_2_COMMON->CCR |= ADC_CCR_DELAY_2; ADC1_2_COMMON->CCR |= ADC_CCR_MDMA; ADC1_2_COMMON->CCR |= ADC_CCR_MULTI_0 |ADC_CCR_MULTI_1 |ADC_CCR_MULTI_2; DMA1_Channel1->CCR &= ~DMA_CCR_EN; //DMA disable DMA1_Channel1->CMAR = (uint32_t)&dual_adc; DMA1_Channel1->CNDTR = 0x200; DMA1_Channel1->CPAR = 0x5000030C; DMA1->IFCR = 0xFFFFFFFF; DMA1_Channel1->CCR = 0x58E; DMA1_Channel1->CCR |= DMA_CCR_EN; //DMA enable ADC1->CR |= ADC_CR_ADEN; // enable the ADC ADC1->CR |= ADC_CR_ADSTART; ADC2->CR |= ADC_CR_ADEN; ADC2->CR |= ADC_CR_ADSTART; } //------------------------------------ TIM3 останавливается в main()
  4. Keil asm

    А больше вас в этом быдлокоде ничего не смущает? Телепаты, угадывающие МК, в отпуске. Вот ответ, достойный гуру!!! Браво!!! Занавес.
  5. Keil asm

    83: int R0,R1,R2,R3,R4,R5; 84: __ASM 85: ( 0x080025C6 4A0C LDR r2,[pc,#48] ; @0x080025F8 86: "MOV R0, &buff \n" 87: "MOV R1, #port \n" 88: "MOV R2, #step \n" 89: "MOV R3, #256 \n" 90: "next_loop: \n" 91: "LDRB R4, [R0], #1 \n" 92: "STRB R4, [R1] \n" 93: "MOV R5, R2 \n" 94: "loop_DDS: \n" 95: "SUBS R5, #1 \n" 96: "BNE loop_DDS \n" 97: "SUBS R3, #1 \n" 98: "BNE next_loop \n" 99: ); 0x080025C8 4614 MOV r4,r2 0x080025CA 4A0C LDR r2,[pc,#48] ; @0x080025FC 0x080025CC 6813 LDR r3,[r2,#0x00] 0x080025CE 4A0C LDR r2,[pc,#48] ; @0x08002600 0x080025D0 6810 LDR r0,[r2,#0x00] 0x080025D2 F44F7580 MOV r5,#0x100 0x080025D6 BF00 NOP 0x080025D8 F8141B01 LDRB r1,[r4],#0x01 0x080025DC 7019 STRB r1,[r3,#0x00] 0x080025DE 4606 MOV r6,r0 0x080025E0 BF00 NOP 0x080025E2 4632 MOV r2,r6 0x080025E4 3A01 SUBS r2,r2,#0x01 0x080025E6 4616 MOV r6,r2 0x080025E8 D000 BEQ 0x080025EC 0x080025EA E7FA B 0x080025E2 0x080025EC 462A MOV r2,r5 0x080025EE 3A01 SUBS r2,r2,#0x01 0x080025F0 4615 MOV r5,r2 0x080025F2 D000 BEQ 0x080025F6 0x080025F4 E7F0 B 0x080025D8 100: } Уважаемые гуру! Еще пара вопросов. 1. На кой инлайн ассемблер Keilа вставляет NOP? 2. Байт, считываемый из buff, передается в GPIOA->ODR, причем записывается и в PA0..PA7(что я и ожидал), и в PA8..PA15(а это не ожидал). Что я не так делаю?
  6. Keil asm

    Вот скачал, правда еще не вникал. Raspberry Pi Assembly Language Programming ARM Processor Coding Stephen Smith RASPBERRY PI ASSEMBLER Roger Ferrer Ibґan˜ez Cambridge, Cambridgeshire, U.K. William J. Pervin Dallas, Texas, U.S.A. F28HS Hardware-Software Interface: Systems Programming Hans-Wolfgang Loidl Не могу прикрепить файлы, хотя каждый из них < 5Mb
  7. Keil asm

    Я еще не дошел до этих тонкостей. На Малине CodeBlocks был установлен, я попробовал накропать - получилось. Теперь СВ на десктоп поставлю и попробую в нем ассемблер поковырять. Такие вот планы, только с текучкой разобраться надо.
  8. Keil asm

    Было дело, давали мне Raspberry Pi 3 пощупать. По цене - не для пенсионеров. Но понравилась. А тут неделю назад махнул свою Ардуину на Апельсин. Я ж даже не знал, что у нее нет HDMI, только видеовыход ужасного качества. TFT_v1.rar
  9. Keil asm

    А как тогда я к разъему GPIO подключил дисплей по 8-битной шине? Или мы говорим о разных вещах? Умельцы к DCMI внешний АЦП прикручивают и с помощью ассемблера 100MSPS от внешнего АЦП получают. Аудиопроцессор поди такое не потянет?
  10. Keil asm

    Ход моих мыслей: 1. STM32 - ARM 2. Orange Pi Zero - ARM 3. С ассемблером знаком only AVR. 4. Ну не на форуме же ARM задавать вопрос про ассемблерные вставки. 5. С Linux -ом пытаюсь подружиться уже год, есть положительные результаты.
  11. Keil asm

    Это мой первый опыт с ассемблером ARM. Задача состоит в том, чтобы прикрутить внешний АЦП к Orange Pi Zero.
  12. Keil asm

    Как-то так. /* USER CODE BEGIN 0 */ void myLED(void) { int R0,R1,R2,R3; __ASM ( "MOV R0, #1 \n" "MOV R1, #0x2000 \n" "MOV R2, #0x4001100C \n" "loop: \n" "STR R0, [R2] \n" "MOV R3, #0x00100000 \n" "delay_1: \n" "SUBS R3, R3, #1 \n" "BNE delay_1 \n" "STR R1, [R2] \n" "MOV R3, #0x00500000 \n" "delay_2: \n" "SUBS R3, R3, #1 \n" "BNE delay_2 \n" "B loop \n" ); } /* USER CODE END 0 */ Не получается задержку между переключением светодиода выделить в процедуру.
  13. Keil asm

    Может я вопрос задал неверно. __ASM("NOP"); Мне нужно вместо NOP вставить десяток ассемблерных инструкций. Как?
  14. Keil asm

    Спасибо. Сейчас приступлю к изучению. https://developer.arm.com/documentation/dui0473/j/preface/about-this-book Это mdk_arm_asm_ user_guide - вид сбоку
  15. Keil asm

    Пошлите куда надо начинающего. Нужно в программе на Си (Кейл) написАть ассемблерную функцию. mdk_armcc и armasm пытаюсь осилить. Может что нибудь попроще есть? Или это вопрос для подфорума Кейл?
  16. 103C8T и LL

    Ставил CubeIDE, а он мне J-link китайский предложил обновить прошивку и благополучно вывел из строя. Попытки оживить не увенчались успехом, жду когда приедет микруха, чтобы поменять. А я на CubeIDE обиделся, снес, так и юзаю часть в Кейле, часть в TrueStudio. Дак я графически установил РА15 как вход ЕТР. Опыта большого работы с Кубом нет - поморгать диодом, подключить TFT по FSMC, fastinterlieved ADC - вот и все попытки работы с Кубом. Народ то как разошелся - и что самое интересное все правы отчасти. А "правда всегда одна".
  17. 103C8T и LL

    Куб подключил генерацию AFIO. А дальше самому: Открываем MX_TIM2_Init(); А дальше ручками делаем ремап /* USER CODE BEGIN TIM2_Init 1 */ LL_GPIO_AF_RemapPartial1_TIM2(); /* USER CODE END TIM2_Init 1 */ И все работает. Повторюсь, никогда раньше не заморачивался с переназначением выводов, т.к. юзал другие корпуса минимум 64, поэтому и такой нубский вопрос задал. Всем спасибо и удачи! А Куб рекламируют, что он выполняет инициализацию периферии. Вот я на рекламу и попал. Делает, да не все, что хотелось...
  18. 103C8T и LL

    Да никто, кроме собственной лени. Сегодня с утра прошагал код - регистр AFIO_MAPR поле TIM2_REMAP[1:0] колом нолики т.е. никакого ремапа то и нету. У меня раньше корпуса были минимум 64 ноги и вопрос с ремапом не возникал. Счас разбираться будем, чего он не выполняет мои хотелки. Всем спасибо.
  19. 103C8T и LL

    Я и erratы почитываю. С HALом у меня не сложились отношения. А насчет LL - хочу составить свое мнение. SPL и CMSIS - это "наше все".
  20. 103C8T и LL

    Начал осваивать LL библиотеку, столкнулся с такой проблемой. У TIM2 имеется вход ETR, pin PA0, можно переназначить на PA15. Вот с переназначением такая интересная штука происходит. CubeMx (5.6) генерирует проект как положено - если назначен PA15 то и в коде он указан, как LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOA); /**TIM2 GPIO Configuration PA15 ------> TIM2_ETR */ GPIO_InitStruct.Pin = Freq_IN_Pin; GPIO_InitStruct.Mode = LL_GPIO_MODE_FLOATING; LL_GPIO_Init(Freq_IN_GPIO_Port, &GPIO_InitStruct); НО в железе входом остается PA0??? Если назначить PA0 так и остается PA0 входом ETR? Кто нибудь сталкивался или это у меня как у начинающего такие странные вещи происходят? Поможите, люди добре...
  21. Поменял IC двунаправленного буфера на шине данных дисплея. Заработала память, как положено. На 3й день только дошло до меня, что Вы подсказали проверить. Всем спасибо,а Вам большущее спасибо.
  22. CS дисплея колом стоит вверху. А вот сейчас увидел, что меняется мл. бит памяти при работе дисплея. Благо у меня ЛА 16 каналов сейчас на все пины сяду и посмотрю что и как.
  23. Понял - запись ЛА по CS RAM и включить канал регистрации CS дисплея. Сейчас попробую. Вспомнил, что у данного дисплея матрица тачскрина выведена на какие то ножки, а сейчас роюсь и не могу найти на какие. И кажется на управляющие ноги. Гугл тоже не помогает. Может у Вас инфа где то есть по 3,5 inch TFT LCD mcufriend.com
  24. Я смотрел ЛА - на каждый байт в дисплей устанавливается CS, т.е. не пост-но он активный. Запись в память по времени где то 1,5 мсек, есс-но ничего не видно, если пошагово - никаких артефактов. //передать данные void Write_Dat(uint8_t dt) { ADDR_DATA = dt; __ASM("nop"); __ASM("nop"); } Вы про эти? Это запись в дисплей. А для RAM счас вставлю, посмотрю, что получится.
  25. Отпаял RD - память перестала портиться. Вот он гад и попался. Я уже писАл ранее, что дисплей работает - экран заливается, палочки-кружочки разноцветные рисует, картинку с микроSD выводит. Получается, он не желает делить FSMC еще с кем-то. Тогда что - оторвать его от FSMC и устроить ему ногодрыг, либо тогда с другим дисплеем работать. Как то так.
×
×
  • Создать...