STM32 Первый старт

Кто любит RISC в жизни, заходим, не стесняемся.
inkHunter
Грызет канифоль
Сообщения: 287
Зарегистрирован: Сб авг 21, 2010 20:44:27
Откуда: Ростов
Контактная информация:

STM32 Первый старт

Сообщение inkHunter »

Настроил таймер и порт с помощью STM32_Init.c все норм но почему то если добавляю библиотеку stm32f10x чтобы можна работать с GPIOC->BSRR=GPIO_BSRR_BS8 выдает ошибку или как по другому управлять портом ?! ((( В самом дебаге прерывание работает, помогите пожалуйста
#include <stm32f10x_lib.h>
#include "STM32_Init.h"
int a=0;
void TIM1_UP_IRQHandler (void)
{
if ((TIM1->SR & 0x0001) != 0)
{
if (a==0)
{
// GPIOC->BSRR=GPIO_BSRR_BS8; // on ошибка
a=1;
}
else
{
// GPIOC->BSRR=GPIO_BSRR_BR8; // off ошибка
a=0;
}

TIM1->SR &= ~(1<<0);
}
}

int main (void)
{
stm32_Init ();
while (1)
{
}
}
STM32_Timer.rar
исходник
(230.73 КБ) 499 скачиваний
Последний раз редактировалось inkHunter Чт авг 11, 2011 11:16:52, всего редактировалось 1 раз.
Реклама
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Re: STM32 TIM1+Прерывание

Сообщение BerZerK-ku »

Почему :#include <stm32f10x_lib.h> , а не #include <stm32f10x.h> ?
Реклама
inkHunter
Грызет канифоль
Сообщения: 287
Зарегистрирован: Сб авг 21, 2010 20:44:27
Откуда: Ростов
Контактная информация:

Re: STM32 TIM1+Прерывание

Сообщение inkHunter »

BerZerK-ku писал(а):Почему :#include <stm32f10x_lib.h> , а не #include <stm32f10x.h> ?
убрал #include <stm32f10x_lib.h> подключил #include <stm32f10x.h> все норм... в программе все работает прерывание, порт, но когда загружаю на дискавери выдает error while attempting to read 312 bytes from 0x10000000 нажимаю ок, отлажую, но виснет после stm32_Init (); ((((
Galizin
Мучитель микросхем
Сообщения: 477
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Re: STM32 TIM1+Прерывание

Сообщение Galizin »

Если в программе все работает, то что же не так? После инициализации стоит глухой while(1) - он и должен зависать.
Реклама
Эиком - электронные компоненты и радиодетали
inkHunter
Грызет канифоль
Сообщения: 287
Зарегистрирован: Сб авг 21, 2010 20:44:27
Откуда: Ростов
Контактная информация:

Re: STM32 TIM1+Прерывание

Сообщение inkHunter »

Galizin писал(а):Если в программе все работает, то что же не так? После инициализации стоит глухой while(1) - он и должен зависать.
Виснет у stm32_Init (); не доходит до while(1)
Реклама
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: STM32 TIM1+Прерывание

Сообщение dosikus »

Victor Gordienko писал(а):
Galizin писал(а):Если в программе все работает, то что же не так? После инициализации стоит глухой while(1) - он и должен зависать.
Виснет у stm32_Init (); не доходит до while(1)
Тактовая (множитель) верно настроена ?
Реклама
inkHunter
Грызет канифоль
Сообщения: 287
Зарегистрирован: Сб авг 21, 2010 20:44:27
Откуда: Ростов
Контактная информация:

Re: STM32 TIM1+Прерывание

Сообщение inkHunter »

dosikus писал(а):
Victor Gordienko писал(а): Виснет у stm32_Init (); не доходит до while(1)
Тактовая (множитель) верно настроена ?
не уверен, только начал разбираться с стм32, если есть время скачайте исходник пожалуйста и посмотрите. Спасибо
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: STM32 TIM1+Прерывание

Сообщение dosikus »

Множитель стоял 9 , выставь как на картинке.
8*9=72 однако :)))
а 100RB только 24 могет...

Изображение
Вложения
stm32_1.png
(68.34 КБ) 506 скачиваний
inkHunter
Грызет канифоль
Сообщения: 287
Зарегистрирован: Сб авг 21, 2010 20:44:27
Откуда: Ростов
Контактная информация:

Re: STM32 TIM1+Прерывание

Сообщение inkHunter »

Множитель стоял 9 , выставь как на картинке.
8*9=72 однако :)))
а 100RB только 24 могет...


Все, большое Вам спасибо, работает. Нет ли у Вас примеров как у STM32_Init.c настроить АПЦ или ШИМ? Хочеться поработать с STM32.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: STM32 TIM1+Прерывание

Сообщение dosikus »

http://ziblog.ru/category/mikrokontrolleryi/stm32/

Этот INIT всего лишь файл конфигурации к тому же старый и неполный .
Лучше понять все , чем шаблонами пользоваться .
Смотри ссылку...
inkHunter
Грызет канифоль
Сообщения: 287
Зарегистрирован: Сб авг 21, 2010 20:44:27
Откуда: Ростов
Контактная информация:

Re: STM32 TIM1+Прерывание

Сообщение inkHunter »

dosikus писал(а):http://ziblog.ru/category/mikrokontrolleryi/stm32/

Этот INIT всего лишь файл конфигурации к тому же старый и неполный .
Лучше понять все , чем шаблонами пользоваться .
Смотри ссылку...
Как все сложно, с авр все просто, будем разбираться ....
Аватара пользователя
SubDia
Держит паяльник хвостом
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Re: STM32 TIM1+Прерывание

Сообщение SubDia »

Интересно, кстати, замечено.. Я все глаза высмотрел - не увидел. Вот что опыт животворящий делает, однако! =)
dosikus, спасибо за ссылку. Мне что-то все старые материалы попадались (которые, гм, не без ошибок).
(Вы, кстати, не модератор на одном из подобных сайтов, аль обознался я?)
Victor Gordienko, оно сложно конечно, сходу не получится, наверное. Но вот АЦП достаточно просто запустить (без заковыристых режимов) - я как раз добился нормальной работы оного. Только над документацией сидеть долго придется, я уже забыл как пахнет разогретый паяльник. Все бумажки да бумажки. Чувствую, после этого зверя об АВР-ах позабуду напрочь. :beer:
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
inkHunter
Грызет канифоль
Сообщения: 287
Зарегистрирован: Сб авг 21, 2010 20:44:27
Откуда: Ростов
Контактная информация:

Re: STM32 TIM1+Прерывание

Сообщение inkHunter »

SubDia писал(а):Интересно, кстати, замечено.. Я все глаза высмотрел - не увидел. Вот что опыт животворящий делает, однако! =)
dosikus, спасибо за ссылку. Мне что-то все старые материалы попадались (которые, гм, не без ошибок).
(Вы, кстати, не модератор на одном из подобных сайтов, аль обознался я?)
Victor Gordienko, оно сложно конечно, сходу не получится, наверное. Но вот АЦП достаточно просто запустить (без заковыристых режимов) - я как раз добился нормальной работы оного. Только над документацией сидеть долго придется, я уже забыл как пахнет разогретый паяльник. Все бумажки да бумажки. Чувствую, после этого зверя об АВР-ах позабуду напрочь. :beer:
Можете скинуть исходник АЦП ?
Аватара пользователя
SubDia
Держит паяльник хвостом
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Re: STM32 TIM1+Прерывание

Сообщение SubDia »

Скинуть исходник могу, конечно. Да только работаю я в IAR, во-первых; во-вторых - кроме АЦП, у меня там еще UART, кнопка, и прерывания по UART и EXTI. Много мешанины, Вам ненужной, хотя комментарии писал к каждой строке практически.
Могу вычленить инициализацию АЦП (и дальнейший его запуск), и в виде кода оформить в сообщении. Если будет угодно.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
inkHunter
Грызет канифоль
Сообщения: 287
Зарегистрирован: Сб авг 21, 2010 20:44:27
Откуда: Ростов
Контактная информация:

Re: STM32 TIM1+Прерывание

Сообщение inkHunter »

SubDia писал(а):Скинуть исходник могу, конечно. Да только работаю я в IAR, во-первых; во-вторых - кроме АЦП, у меня там еще UART, кнопка, и прерывания по UART и EXTI. Много мешанины, Вам ненужной, хотя комментарии писал к каждой строке практически.
Могу вычленить инициализацию АЦП (и дальнейший его запуск), и в виде кода оформить в сообщении. Если будет угодно.
ок, спасибо )
Аватара пользователя
SubDia
Держит паяльник хвостом
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Re: STM32 TIM1+Прерывание

Сообщение SubDia »

Так скидывать код или нет? :)
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
inkHunter
Грызет канифоль
Сообщения: 287
Зарегистрирован: Сб авг 21, 2010 20:44:27
Откуда: Ростов
Контактная информация:

Re: STM32 TIM1+Прерывание

Сообщение inkHunter »

SubDia писал(а):Так скидывать код или нет? :)
да
Аватара пользователя
SubDia
Держит паяльник хвостом
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Re: STM32 TIM1+Прерывание

Сообщение SubDia »

Инициализация:

Код: Выделить всё

  RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;  //Подключаем АЦП к линии тактирования
  RCC->CFGR |= RCC_CFGR_ADCPRE;        //Предделитель на максимум (на 8)
  RCC->CFGR |= RCC_CFGR_ADCPRE_DIV8;

  ADC1->CR2 |= ADC_CR2_CAL;          //Запуск калибровки (это нужно сделать ДО установки ADON)
    while (!(ADC1->CR2 & ADC_CR2_CAL))
    {
    }
  ADC1->SQR3 |= (ADC_SQR3_SQ1_1 | ADC_SQR3_SQ1_3); //выбираем 10й канал (PC0)
  ADC1->CR2 |= (ADC_CR2_EXTSEL_0 | ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_2 | ADC_CR2_EXTTRIG);
  ADC1->CR2 |= ADC_CR2_ADON;
  GPIOC->CRL &= ~GPIO_CRL_CNF0;                        //Аналоговый вход (это АЦП, 10й канал)
  GPIOC->CRL &= ~GPIO_CRL_MODE0;
Собственно запуск:

Код: Выделить всё

void ADC_RBat(void)                   
{   
    ADC1->CR2 |= ADC_CR2_SWSTART;     //Запуск преобразования
    while (!(ADC1->SR & ADC_SR_EOC))  //Ждем окончания преобразования
    { 
    }
    adc = ADC1->DR;                   //Считываем данные
    adcLSB = adc;                     //Выделяем младшую часть
    adc>>=8;                          //Сдвигаем
    adcMSB = adc;                     //И выделяем старшую часть
 return;
}
В функции запуска и обработки результатов измерения мне потребовалось разбить результат на старшую и младшую части - чтобы потом передать по UART. Вам это может не потребоваться. Также обратите внимание на коэффициент деления тактовой частоты при инициализации. Я установил максимальный коэффициент (8), так как использую внешний кварц.
А все остальное - посмотрите по описанию регистров АЦП, все прояснится.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
inkHunter
Грызет канифоль
Сообщения: 287
Зарегистрирован: Сб авг 21, 2010 20:44:27
Откуда: Ростов
Контактная информация:

Re: STM32 TIM1+Прерывание

Сообщение inkHunter »

Большое спасибо ) Вроде все понял кроме того как выбрать канал АЦП
ADC1->SQR3 |= (ADC_SQR3_SQ1_1 | ADC_SQR3_SQ1_3); не могли бы Вы объяснить эту строчку, или как выбрать другой канал ?
Аватара пользователя
SubDia
Держит паяльник хвостом
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Re: STM32 TIM1+Прерывание

Сообщение SubDia »

Да, конечно, поясню.
В общем, мы имеем возможность производить до 16 измерений последовательно - от 0 до 15 (считайте, что это общее количество каналов). В регистрах SQR1..SQR3 у нас находятся "ячейки" всех 16 преобразований. Область первого преобразования находится в регистре SQR3 (SQ1). А чтобы выбрать канал № 10, нужно в эту "ячейку" записать число 1010 = 10. То есть строкой

Код: Выделить всё

ADC1->SQR3 |= (ADC_SQR3_SQ1_1 | ADC_SQR3_SQ1_3);
я устанавливаю первый и третий биты в этой "ячейке", получая таким образом число 1010 (в двоичном виде), либо 10 - в десятичном виде. Это номер канала.
Если Вы захотите выбрать, к примеру, канал № 6, тогда Вам нужно будет эту строку видоизменить следующим образом:

Код: Выделить всё

ADC1->SQR3 |= (ADC_SQR3_SQ1_1 | ADC_SQR3_SQ1_2);
, записывая туда число 0110 = 6.
Учитывайте также и последовательность измерений, если придется измерять напряжения различных источников.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Ответить

Вернуться в «ARM»