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

STM32 для чайника


ART_ME

Рекомендуемые сообщения

41 минуту назад, snn_krs сказал:

Странно что Pin_7 работает. Первой командой при инициализации порта, должно быть включение тактирования

Я не весь код привел. Безусловно тактирование включено.

зы. В обед успел отключить 

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);

GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE); 

Все работает! PB3, PB4 - светодиод ожил. Загрузка прошивки нормальная.

Еще одну страничку в stm32 изучил с Вашей помощью :)

 

Ссылка на комментарий
Поделиться на другие сайты

В 22.09.2017 в 18:53, mail_robot сказал:

ну подковать язык и прописать. У вас в функции указатель на пустой тип приводится к конкретному типу. Надо посмотреть доку на компилятор и почитать как это должно происходить по его мнению. Возможно это поможет. Дока на компилятор обычно лежит гдето в папках среды разработки, если он встроен. Понятно что на идише, поэтому придется чуть поднапрячься.

Я обычно таких сложностей стараюсь избегать. Чем проще код, тем он понятнее и меньше багов

возможно вместо этой ерунды


reinterpret_cast<const uint8_t*>(buf);

прокатит простое явное приведение типа


(uint8_t*)buf;

дуриновски обьектный код это жопа полная. Старайтесь его избегать

 

в треугольных скобках -- это не приведение типа. Это указание компилятору, с каким типом реализовывать шаблонную функцию (есть такая штука в Ц++). Можно написать без треугольных скобок, но в реализации явно указать тип параметра. Шаблоны нужны для того, чтобы компилятор скопом создавал функции с нужными типами параметра и результата в зависимости от того, как в каком месте кода эта функция используется. 

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Привет всем.

Ни как не могу побороть HAL BUSY На F103;

Может есть у кого решение? Происходит в случае не получения ответа от слейва и все встает колом. С меня что угодно, я чет уже замучился совсем.

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

16 часов назад, MihaNN52 сказал:

Привет всем.

Ни как не могу побороть HAL BUSY На F103;

Может есть у кого решение? Происходит в случае не получения ответа от слейва и все встает колом. С меня что угодно, я чет уже замучился совсем.

Что не работает, я просто не совсем понял что такое HAL  BUSY

Ссылка на комментарий
Поделиться на другие сайты

Проблема такая, всегда работал с инжекторными каналами, но нужно применить ДМА для АЦП, попробовал инжекторный канал с ДМА не получилось запустить, не знаю должно ли работать, потом попробовал регулярные каналы с ДМА, и тоже не удалось запустить, причем как ХАЛом, так и регистрами, потом попробовал регулярный канал без ДМА тоже не работает. Сейчас пытаюсь первый регулярный канал АЦП с ДМА запустить и ничего

Скрытый текст

void ADC_Init()
{ 
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
GPIOA->CRL&=~GPIO_CRL_MODE1;
GPIOA->CRL&=~GPIO_CRL_CNF1;
RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;
RCC->CFGR|=RCC_CFGR_ADCPRE_DIV6;// делитель на 6, таккак тактирование проца 72МГц

ADC1->CR1 = 0;
ADC1->SQR1 = 0;
ADC1->CR2 |= ADC_CR2_CAL;//калибр.
while (!(ADC1->CR2 & ADC_CR2_CAL));
ADC1->CR2 |= ADC_CR2_EXTSEL | ADC_CR2_DMA;
ADC1->CR2 |= ADC_CR2_CONT;
ADC1->CR1 |= ADC_CR1_EOCIE;//прерывание
ADC1->SQR3= 1;//первый канал
ADC1->CR2 = ADC_CR2_ADON; 
//ADC1->CR2 |= ADC_CR2_SWSTART;
}
void ADC_Start_RegChnl(uint16_t *tADC_DataBuff, uint8_t tCnt)
{RCC->AHBENR |= RCC_AHBENR_DMA1EN;
  // настриваем ДМА
  DMA1_Channel1->CCR &= ~(DMA_CCR_EN | DMA_CCR_TCIE);  // отключили канал
  DMA1->IFCR = (0xf << 0);
  DMA1_Channel1->CPAR = (uint32_t) &ADC1->DR;
  DMA1_Channel1->CMAR = (uint32_t) tADC_DataBuff;
  DMA1_Channel1->CNDTR = tCnt;
  DMA1_Channel1->CCR |= (DMA_CCR_PSIZE| DMA_CCR_MSIZE| DMA_CCR_MINC | DMA_CCR_TCIE | DMA_CCR_EN);//Задать размерность данных 16бит

 ADC1->CR2 |= ADC_CR2_SWSTART;

}
int main(void)
{
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();


NVIC_EnableIRQ(DMA1_Channel1_IRQn);

 NVIC_EnableIRQ(ADC1_IRQn);

ADC_Init(ADC1);
	ADC_Start_RegChnl(data112, 1);

  while (1)
  {

if(Event & EVENT_ADC_CMPL)
   {
	data112[0] = 0;

	ADC_Start_RegChnl(data112, 1);
	Event &= ~EVENT_ADC_CMPL;
   }
}
}

void ADC1_IRQHandler(void)
{
  if(ADC1->SR & ADC_SR_EOC)
  {// закончили преобразование
   Event |= EVENT_ADC_CMPL;
     
   ADC1->SR &= ~ADC_SR_EOC;


  }
}

 

 

А вот пробую один регулярный канал, по прерыванию, без ДМА

Скрытый текст

void ADC_Init()
{ 
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
GPIOA->CRL&=~GPIO_CRL_MODE1;
GPIOA->CRL&=~GPIO_CRL_CNF1;
RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;
RCC->CFGR|=RCC_CFGR_ADCPRE_DIV6;// делитель на 6, таккак тактирование проца 72МГц

ADC1->CR1 = 0;
ADC1->SQR1 = 0;
ADC1->CR2 |= ADC_CR2_CAL;//калибр.
while (!(ADC1->CR2 & ADC_CR2_CAL));
ADC1->CR2 |= ADC_CR2_EXTSEL;
ADC1->CR2 |= ADC_CR2_CONT;
 ADC1->CR1 |= ADC_CR1_EOCIE;
ADC1->SQR3= 1;//первый канал
ADC1->CR2 = ADC_CR2_ADON; 
}



int main(void)
{
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();



 NVIC_EnableIRQ(ADC1_IRQn);

ADC_Init(ADC1);
	
 ADC1->CR2 |= ADC_CR2_SWSTART;

  while (1)
  {

if(Event & EVENT_ADC_CMPL)
   {
	data112[0] =ADC1->DR;

	 ADC1->CR2 |= ADC_CR2_SWSTART;

	Event &= ~EVENT_ADC_CMPL;
   }
}
}

void ADC1_IRQHandler(void)
{
  if(ADC1->SR & ADC_SR_EOC)
  {// закончили преобразование
   Event |= EVENT_ADC_CMPL;
     
   ADC1->SR &= ~ADC_SR_EOC;


  }
}

 

 

Изменено пользователем Электронщик
Ссылка на комментарий
Поделиться на другие сайты

HAL_Init();

SystemClock_Config();

А это для чего?

Микроконтроллер STM32F103C8T6?

За такой код надо за яйки подвесить.

 

Изменено пользователем Oxford
Ссылка на комментарий
Поделиться на другие сайты

Да, это конфигурация тактирования проца сделана кубом.

И что с кодом не так? Пользуюсь такм не первый раз, дае, если я регистрами тактирование вставлю, оно все равно работать не будет.. Проблема не в этом, посмотрел отладчиком., регистры настройки АЦП установлены, что не так, не понятно

Изменено пользователем Электронщик
Ссылка на комментарий
Поделиться на другие сайты

3 hours ago, Электронщик said:

ADC_Init(ADC1);

Интересно какую функцию подставляет компилятор по этому вызову. Есть ваша без параметров и HAL с двумя параметрами.

Ссылка на комментарий
Поделиться на другие сайты

Да то была функция с выбором ADC1 ,2 или 3, потом убрал выбор в итоге ADC_Init(); и это моя функция, а не хал

Хал с двумя параметрами, то просто тактирование процветания, у меня так всегда все работает, ну подставляю регистрами тактирование проца, ну будет тоже самое. Времени нет сейчас вставить тактирование по регистрам, но позже сделаю.

Изменено пользователем Электронщик
Ссылка на комментарий
Поделиться на другие сайты

11 минуту назад, snn_krs сказал:

Наверно надо ADC1->CR2 |= ADC_CR2_ADON;

 

Ага. Он  настраивал, а потом присвоил тем самым стерев все. CR2 тупо равен 0x00000001

Изменено пользователем Oxford
Ссылка на комментарий
Поделиться на другие сайты

Кстати не заметил, что или не сделал. Попробую, так бывает десять раз что-то меняешь и не замечаешь, спасибо, проверю. Это ж включение АЦП))).

Изменено пользователем Электронщик
Ссылка на комментарий
Поделиться на другие сайты

5 минут назад, Электронщик сказал:

Кстати не заметил, что или не сделал. Попробую, так бывает десять раз что-то меняешь и не замечаешь, спасибо, проверю. Это ж включение АЦП))).

Ага по умолчанию все биты в нулях кроме 1 бита включения ))), а ты посмотри по дефолту что там они означают. Считай ничего и не настраивал. Ты когда выкладываешь, скрины регистров пожалуйста прикрепляй или хотя бы число.

А надо не по сто раз менять все, а просто изучить ADC периферию и работать с ней правильно. Это не сложно.

 

HAL_Init();

SystemClock_Config();

Это убрать чтобы я больше не видел в коде.

Изменено пользователем Oxford
Ссылка на комментарий
Поделиться на другие сайты

там если не выпендриваться, то делов на 2 минуты. Куб этот код автоматом пишет

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

В 17.06.2018 в 12:57, GOR23 сказал:

@MihaNN52 С какой функции hal_ busy возврашается?

 

HAL_I2C_Master_Read и  HAL_I2C_Mem_Read  В любом случае если подчиненный не дает ответ приходит BUSSY и че дальше с ним делать не понимаю. Как его сбросить? Командой или по таймауту?

Ссылка на комментарий
Поделиться на другие сайты

HAL_BUSY возвращается функцией только в одном случае, когда флаг состояния в регистре SR1 I2C говорит о том, что шина не готова к следующей транзакции (HAL_I2C_STATE_READY != 1)

Если в наглую, то нужно просто перезапустить чтение заново. По флаг HAL_BUSY ваша функция вывалится в колбэк, там надо проверить состояние этого флага. Если он есть, просто перезапускаем чтение и все. Он сбрасывается автоматически.

Но надо гдето сохранить данные о том, что произошло такое событие.

Вообще если вы получаете такой флаг, то с вашей системой явный непорядок. В нормальной жизни этот флаг не должен получаться никогда. В ином случае ваш адресат либо неисправен, либо работает в неверном режиме, либо у вас на плату упала арматурина. В любом случае работу лучше прекратить

 

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

1 hour ago, mail_robot said:

В нормальной жизни этот флаг не должен получаться никогда

немного надо уточнить - никогда, если вы не в режиме поллинга

Изменено пользователем mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...