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

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

Сообщение 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 КБ) 501 скачивание
Последний раз редактировалось inkHunter Чт авг 11, 2011 11:16:52, всего редактировалось 1 раз.
Контактная информация:
Реклама
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

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

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

Сообщение 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 (); ((((
Контактная информация:
Мучитель микросхем
Сообщения: 478
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Сообщение Galizin »

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

Сообщение inkHunter »

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

Сообщение dosikus »

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

Сообщение inkHunter »

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

Сообщение dosikus »

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

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

Сообщение inkHunter »

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


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

Сообщение dosikus »

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

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

Сообщение inkHunter »

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

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

Сообщение SubDia »

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

Сообщение inkHunter »

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

Сообщение SubDia »

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

Сообщение inkHunter »

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

Сообщение SubDia »

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

Сообщение inkHunter »

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

Сообщение 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-ники. )
Изображение
Грызет канифоль
Сообщения: 287
Зарегистрирован: Сб авг 21, 2010 20:44:27
Откуда: Ростов

Сообщение inkHunter »

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

Сообщение 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»