STM32 Первый старт
-
inkHunter
- Грызет канифоль
- Сообщения: 287
- Зарегистрирован: Сб авг 21, 2010 20:44:27
- Откуда: Ростов
- Контактная информация:
STM32 Первый старт
Настроил таймер и порт с помощью 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)
{
}
}
#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)
{
}
}
Последний раз редактировалось inkHunter Чт авг 11, 2011 11:16:52, всего редактировалось 1 раз.
- Реклама
-
BerZerK-ku
- Мучитель микросхем
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
Re: STM32 TIM1+Прерывание
Почему :#include <stm32f10x_lib.h> , а не #include <stm32f10x.h> ?
-
inkHunter
- Грызет канифоль
- Сообщения: 287
- Зарегистрирован: Сб авг 21, 2010 20:44:27
- Откуда: Ростов
- Контактная информация:
Re: STM32 TIM1+Прерывание
убрал #include <stm32f10x_lib.h> подключил #include <stm32f10x.h> все норм... в программе все работает прерывание, порт, но когда загружаю на дискавери выдает error while attempting to read 312 bytes from 0x10000000 нажимаю ок, отлажую, но виснет после stm32_Init (); ((((BerZerK-ku писал(а):Почему :#include <stm32f10x_lib.h> , а не #include <stm32f10x.h> ?
Re: STM32 TIM1+Прерывание
Если в программе все работает, то что же не так? После инициализации стоит глухой while(1) - он и должен зависать.
-
inkHunter
- Грызет канифоль
- Сообщения: 287
- Зарегистрирован: Сб авг 21, 2010 20:44:27
- Откуда: Ростов
- Контактная информация:
Re: STM32 TIM1+Прерывание
Виснет у stm32_Init (); не доходит до while(1)Galizin писал(а):Если в программе все работает, то что же не так? После инициализации стоит глухой while(1) - он и должен зависать.
- Реклама
Re: STM32 TIM1+Прерывание
Тактовая (множитель) верно настроена ?Victor Gordienko писал(а):Виснет у stm32_Init (); не доходит до while(1)Galizin писал(а):Если в программе все работает, то что же не так? После инициализации стоит глухой while(1) - он и должен зависать.
-
inkHunter
- Грызет канифоль
- Сообщения: 287
- Зарегистрирован: Сб авг 21, 2010 20:44:27
- Откуда: Ростов
- Контактная информация:
Re: STM32 TIM1+Прерывание
не уверен, только начал разбираться с стм32, если есть время скачайте исходник пожалуйста и посмотрите. Спасибоdosikus писал(а):Тактовая (множитель) верно настроена ?Victor Gordienko писал(а): Виснет у stm32_Init (); не доходит до while(1)
Re: STM32 TIM1+Прерывание
Множитель стоял 9 , выставь как на картинке.
8*9=72 однако
а 100RB только 24 могет...

8*9=72 однако
а 100RB только 24 могет...

- Вложения
-
- stm32_1.png
- (68.34 КБ) 506 скачиваний
-
inkHunter
- Грызет канифоль
- Сообщения: 287
- Зарегистрирован: Сб авг 21, 2010 20:44:27
- Откуда: Ростов
- Контактная информация:
Re: STM32 TIM1+Прерывание
Множитель стоял 9 , выставь как на картинке.
8*9=72 однако
а 100RB только 24 могет...
Все, большое Вам спасибо, работает. Нет ли у Вас примеров как у STM32_Init.c настроить АПЦ или ШИМ? Хочеться поработать с STM32.
8*9=72 однако
а 100RB только 24 могет...
Все, большое Вам спасибо, работает. Нет ли у Вас примеров как у STM32_Init.c настроить АПЦ или ШИМ? Хочеться поработать с STM32.
Re: STM32 TIM1+Прерывание
http://ziblog.ru/category/mikrokontrolleryi/stm32/
Этот INIT всего лишь файл конфигурации к тому же старый и неполный .
Лучше понять все , чем шаблонами пользоваться .
Смотри ссылку...
Этот INIT всего лишь файл конфигурации к тому же старый и неполный .
Лучше понять все , чем шаблонами пользоваться .
Смотри ссылку...
-
inkHunter
- Грызет канифоль
- Сообщения: 287
- Зарегистрирован: Сб авг 21, 2010 20:44:27
- Откуда: Ростов
- Контактная информация:
Re: STM32 TIM1+Прерывание
Как все сложно, с авр все просто, будем разбираться ....dosikus писал(а):http://ziblog.ru/category/mikrokontrolleryi/stm32/
Этот INIT всего лишь файл конфигурации к тому же старый и неполный .
Лучше понять все , чем шаблонами пользоваться .
Смотри ссылку...
- SubDia
- Держит паяльник хвостом
- Сообщения: 995
- Зарегистрирован: Сб апр 02, 2011 17:59:22
- Откуда: Город-герой Севастополь
Re: STM32 TIM1+Прерывание
Интересно, кстати, замечено.. Я все глаза высмотрел - не увидел. Вот что опыт животворящий делает, однако! =)
dosikus, спасибо за ссылку. Мне что-то все старые материалы попадались (которые, гм, не без ошибок).
(Вы, кстати, не модератор на одном из подобных сайтов, аль обознался я?)
Victor Gordienko, оно сложно конечно, сходу не получится, наверное. Но вот АЦП достаточно просто запустить (без заковыристых режимов) - я как раз добился нормальной работы оного. Только над документацией сидеть долго придется, я уже забыл как пахнет разогретый паяльник. Все бумажки да бумажки. Чувствую, после этого зверя об АВР-ах позабуду напрочь.
dosikus, спасибо за ссылку. Мне что-то все старые материалы попадались (которые, гм, не без ошибок).
(Вы, кстати, не модератор на одном из подобных сайтов, аль обознался я?)
Victor Gordienko, оно сложно конечно, сходу не получится, наверное. Но вот АЦП достаточно просто запустить (без заковыристых режимов) - я как раз добился нормальной работы оного. Только над документацией сидеть долго придется, я уже забыл как пахнет разогретый паяльник. Все бумажки да бумажки. Чувствую, после этого зверя об АВР-ах позабуду напрочь.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

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

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

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

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

-
inkHunter
- Грызет канифоль
- Сообщения: 287
- Зарегистрирован: Сб авг 21, 2010 20:44:27
- Откуда: Ростов
- Контактная информация:
Re: STM32 TIM1+Прерывание
даSubDia писал(а):Так скидывать код или нет?
- SubDia
- Держит паяльник хвостом
- Сообщения: 995
- Зарегистрирован: Сб апр 02, 2011 17:59:22
- Откуда: Город-герой Севастополь
Re: STM32 TIM1+Прерывание
Инициализация:
Собственно запуск:
В функции запуска и обработки результатов измерения мне потребовалось разбить результат на старшую и младшую части - чтобы потом передать по UART. Вам это может не потребоваться. Также обратите внимание на коэффициент деления тактовой частоты при инициализации. Я установил максимальный коэффициент (8), так как использую внешний кварц.
А все остальное - посмотрите по описанию регистров АЦП, все прояснится.
Код: Выделить всё
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;
}
А все остальное - посмотрите по описанию регистров АЦП, все прояснится.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

-
inkHunter
- Грызет канифоль
- Сообщения: 287
- Зарегистрирован: Сб авг 21, 2010 20:44:27
- Откуда: Ростов
- Контактная информация:
Re: STM32 TIM1+Прерывание
Большое спасибо ) Вроде все понял кроме того как выбрать канал АЦП
ADC1->SQR3 |= (ADC_SQR3_SQ1_1 | ADC_SQR3_SQ1_3); не могли бы Вы объяснить эту строчку, или как выбрать другой канал ?
ADC1->SQR3 |= (ADC_SQR3_SQ1_1 | ADC_SQR3_SQ1_3); не могли бы Вы объяснить эту строчку, или как выбрать другой канал ?
- SubDia
- Держит паяльник хвостом
- Сообщения: 995
- Зарегистрирован: Сб апр 02, 2011 17:59:22
- Откуда: Город-герой Севастополь
Re: STM32 TIM1+Прерывание
Да, конечно, поясню.
В общем, мы имеем возможность производить до 16 измерений последовательно - от 0 до 15 (считайте, что это общее количество каналов). В регистрах SQR1..SQR3 у нас находятся "ячейки" всех 16 преобразований. Область первого преобразования находится в регистре SQR3 (SQ1). А чтобы выбрать канал № 10, нужно в эту "ячейку" записать число 1010 = 10. То есть строкой я устанавливаю первый и третий биты в этой "ячейке", получая таким образом число 1010 (в двоичном виде), либо 10 - в десятичном виде. Это номер канала.
Если Вы захотите выбрать, к примеру, канал № 6, тогда Вам нужно будет эту строку видоизменить следующим образом:, записывая туда число 0110 = 6.
Учитывайте также и последовательность измерений, если придется измерять напряжения различных источников.
В общем, мы имеем возможность производить до 16 измерений последовательно - от 0 до 15 (считайте, что это общее количество каналов). В регистрах SQR1..SQR3 у нас находятся "ячейки" всех 16 преобразований. Область первого преобразования находится в регистре SQR3 (SQ1). А чтобы выбрать канал № 10, нужно в эту "ячейку" записать число 1010 = 10. То есть строкой
Код: Выделить всё
ADC1->SQR3 |= (ADC_SQR3_SQ1_1 | ADC_SQR3_SQ1_3);Если Вы захотите выбрать, к примеру, канал № 6, тогда Вам нужно будет эту строку видоизменить следующим образом:
Код: Выделить всё
ADC1->SQR3 |= (ADC_SQR3_SQ1_1 | ADC_SQR3_SQ1_2);Учитывайте также и последовательность измерений, если придется измерять напряжения различных источников.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )



