[uquote="Z_h_e",url="/forum/viewtopic.php?p=3765830#p3765830"]казнить нельзя помиловать __enable_irq ();[/uquote]У Cortex-M они включены по умолчанию при включении.
[uquote="ivan dimir",url="/forum/viewtopic.php?p=3765953#p3765953"]и так тоже не работает ни ацп ни таймер[/uquote]Информацию из вас клещами тянуть? Какая среда разработки, какой стартап, какой режим компилятора? Я то может там банальный extern "C"...
extern "C"... отключён среда компиляции atolic truestudio проект создаю с нуля.включаю прерывание по ацп и отключается таймер.Вместе таймера работают как часики.Когда включаешь ацп не в прерывании всё хорошо работает.Проект создавал в С не в С++.startap_stm32f407xx.s. режим компилятора?оптимизация?
Добавлено after 1 minute 59 seconds:
ADC1->SR &=~ ADC_SR_EOC; а почему в Hal это работает?
Во вторых, &= это чтение, побитовое И, запись, т.е. лишние команды без необходимости (запись 1 в регистр статуса никак не влияет на содержимое).
А во первых, если между чтением и записью установится другой флаг в данном регистре, вы его сбросите, так и не узнав, что он был установлен. Заколебешься потом искать, почему, в редких случаях не вызывается прерывание.
Если в ХАЛе так, значит там косяк.
Добавлено after 1 minute 20 seconds:
Отладчик работает? Тормознитесь где-нибудь и поглядите, что в регистрах SR. От этого уже можно сделать какой-либо вывод.
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
/*
* main.c
*
* Created on: 2 лист. 2019 р.
* Author: Ivan
*/
#include "main.h"
volatile unsigned char flag=0;
volatile unsigned char program=0;
//uint32_t adc_data = 0;
volatile unsigned int adc_data=0;
volatile unsigned int pauza1=0;
volatile unsigned int pauza2=0;
void pauza (int T)//ввод самой паузы(программы) она написана отдельно и введеннием #include "paua.h"можно писать в основном цыкле pauza()с вводом целой переменной T
{
int i=0;//введение целойперемменой i
char t=0;// введение вещественной переменной t считает такты микроконтролера
for(i=0;i<T;t++) //програмама в цыкле
{
if(t==255)i=i+1;// условия одного цыкла счёта пределитель i определяется регистром TCCR2 определяется 0.1.2 битами это делителем частоты работы таймера
}
}
//ADC1->CR2 |= ADC_CR2_SWSTART; //Запуск преобразований
while (!(ADC1->SR & ADC_SR_EOC)); //ждем пока первое преобразование завершится
ADC1->SR &=~ADC_SR_EOC ;
// ADC1->SR = 0;
adc_data = ADC1->DR;
if(adc_data > 2024)
{
// GPIOC->ODR|=1<<13;
GPIOC->BSRR |= GPIO_BSRR_BS13;
}
else
{
// GPIOC->ODR&=~1<<13;
GPIOC->BSRR |= GPIO_BSRR_BR13;
}
}
}
вот рабочий код правда ацп работает не в прерывании.
Добавлено after 6 minutes 2 seconds:
что такое теги я нерусский и не понимаю учител.Я вам показал три кода один неработает вы специалисты что можете сказать.Ваши аргумент не убедителен.Ну вообщем спасибо.Наверное в HAL прийдётся ещё посидеть.
[uquote="ivan dimir",url="/forum/viewtopic.php?p=3766034#p3766034"]...я нерусский ...[/uquote] улыбнуло
кто же ты Ванюша?
(? риторический, отвечать не надо)
"... void adc_IRQhanler(void)..." - здесь все правильно?