|
|
  |
STM32F0+Keil=простой старт, Помогите начать работать с АРМ Cortex M0 |
|
|
|
Jul 21 2013, 17:47
|
Участник

Группа: Участник
Сообщений: 56
Регистрация: 15-01-09
Из: Moldova
Пользователь №: 43 421

|
Видимо моя вина, не расписал комментарии. Но это нормально, запомнит. А то автоматом прошло и хорошо, а надо в отладке пройти по шагам и понять что там делается подробно. Я так делаю. В ARM каждый модуль необходимо включить подачей тактового сигнала. hd44780 Вам подсказал, порты А и С были включены, а В нет. Потому и не заработал.
Сообщение отредактировал andries5 - Jul 21 2013, 17:51
|
|
|
|
|
Jul 21 2013, 18:12
|
Частый гость
 
Группа: Участник
Сообщений: 124
Регистрация: 21-07-13
Из: Украина, Ахтырка
Пользователь №: 77 613

|
Цитата(andries5 @ Jul 21 2013, 20:47)  Видимо моя вина, не расписал комментарии. Но это нормально, запомнит. А то автоматом прошло и хорошо, а надо в отладке пройти по шагам и понять что там делается подробно. Я так делаю. В ARM каждый модуль необходимо включить подачей тактового сигнала. hd44780 Вам подсказал, порты А и С были включены, а В нет. Потому и не заработал. Большущее Вам спасибо! Не знаю , куда я смотрел ?  Теперь работает порт В : ))) Мне начинает нравится ARM! Особенно точностью генерирования сигнала! Настроил прерывание на 100Гц и в нем меняю состояние выхода, и мой мультиметр показал точно 50.00Гц !
|
|
|
|
|
Jul 21 2013, 19:28
|
Участник

Группа: Участник
Сообщений: 56
Регистрация: 15-01-09
Из: Moldova
Пользователь №: 43 421

|
Цитата(Artos5 @ Jul 21 2013, 21:12)  Особенно точностью генерирования сигнала! Настроил прерывание на 100Гц и в нем меняю состояние выхода, и мой мультиметр показал точно 50.00Гц ! Учтите, на плате STM32F0Discovery целевой МК, тактируется от встроенного генератора. На плате нет кварца! Только место под него.
|
|
|
|
|
Jul 21 2013, 19:31
|
Частый гость
 
Группа: Участник
Сообщений: 124
Регистрация: 21-07-13
Из: Украина, Ахтырка
Пользователь №: 77 613

|
Цитата(andries5 @ Jul 21 2013, 22:28)  Учтите, на плате STM32F0Discovery целевой МК, тактируется от встроенного генератора. На плате нет кварца! Только место под него. Я это заметил  А скажите пожалуйста что это за системный таймер? И с какой макс. частотой могут происходить прерывания?
|
|
|
|
|
Jul 21 2013, 19:44
|
Местный
  
Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126

|
Цитата(andries5 @ Jul 21 2013, 22:28)  Учтите, на плате STM32F0Discovery целевой МК, тактируется от встроенного генератора. На плате нет кварца! Только место под него. И что??? Вы ничего не путаете??? Цитата SB18 (MCO) ON Provides the 8 MHz for OSC_IN from MCO of STM32F103C8T6.
|
|
|
|
|
Jul 21 2013, 19:52
|
Участник

Группа: Участник
Сообщений: 56
Регистрация: 15-01-09
Из: Moldova
Пользователь №: 43 421

|
Верно! SB18 замкнут, а SB17 разомкнут. Не обратил внимания. Значит от кварца. А о SYSTICK почитать например http://chipspace.ru/stm32-systick
Сообщение отредактировал andries5 - Jul 21 2013, 19:54
|
|
|
|
|
Jul 22 2013, 19:46
|
Частый гость
 
Группа: Участник
Сообщений: 124
Регистрация: 21-07-13
Из: Украина, Ахтырка
Пользователь №: 77 613

|
Цитата(andries5 @ Jul 21 2013, 22:52)  Верно! SB18 замкнут, а SB17 разомкнут. Не обратил внимания. Значит от кварца. А о SYSTICK почитать например http://chipspace.ru/stm32-systickСпасибо! Хорошо разжевано!  Вот по больше таких примеров и описаний!
|
|
|
|
|
Jul 22 2013, 20:14
|
Участник

Группа: Участник
Сообщений: 56
Регистрация: 15-01-09
Из: Moldova
Пользователь №: 43 421

|
Сейчас разбираюсь с таймерами на F0, подбираю подобные описания.
|
|
|
|
|
Aug 16 2013, 17:21
|
Участник

Группа: Участник
Сообщений: 25
Регистрация: 16-02-06
Пользователь №: 14 373

|
вопрос снят)
Сообщение отредактировал _D9_ - Aug 16 2013, 17:45
|
|
|
|
|
Nov 6 2013, 04:12
|
Группа: Новичок
Сообщений: 6
Регистрация: 6-11-13
Пользователь №: 79 060

|
Цитата(andries5 @ Jul 21 2013, 11:47)  Создал проект, пробуйте. Не могу запустить проект в симуляторе - *** error 65: access violation at 0x0000000C : no 'read' permission Подскажите куда копать? Пробовал с stm32f100 debug c помощью st-link проходило успешно, вот только меню периферии существенно отличалось - можно было наблюдать подробную информацию о состоянии портов, настройках и частотах. Здесь же голые регистры показаны. Этот момент от чего зависит?
|
|
|
|
|
Nov 8 2013, 01:30
|
Группа: Новичок
Сообщений: 6
Регистрация: 6-11-13
Пользователь №: 79 060

|
Цитата(Falkon_99 @ Nov 7 2013, 07:40)  В симуляторе проэкт может не работать, например если при инициализации в коде есть бесконечный цикл ожидания готовности регистров. На реальной плате эта проверка легко проходит, а в симуляторе зависает. Может помочь галочка RUNtoMAIN, с которой вы пропустите начальный код STARTUP Дело в том что проект не стартовал совсем, в нулевом адресе. Галочка не помогла.. С другого проекта подглядел, здесь помогло. Установил параметр SARMCM3.DLL ->> "-REMAP" во вкладке Debug. Ошибки все равно идут, но симулирует, правда периферию показывает не так подробно как 32F100 и пользы не приносит. Что бы это значило? И еще вопрос, есть шанс прошить F0 при помощи st-link установленного vlDiscovery или сразу заказывать программатор вместе с МК?
|
|
|
|
|
Nov 12 2013, 07:54
|
Частый гость
 
Группа: Участник
Сообщений: 124
Регистрация: 21-07-13
Из: Украина, Ахтырка
Пользователь №: 77 613

|
Добрый день дорогие друзья и товарищи! Помогите пожалуйста чайнику... Начну по порядку. есть файлы: 1) main.c // тут есть функции индикации 2) STM32F0xx_it.c // тут содержатся обработчики прерывания Во втором файле , такой обработчик: Код void SysTick_Handler(void) { indication_funс(); } Код void led_out (){
clear_leds; // digit off switch (y) // select digit { case 0: IND_PORT->ODR = led_buff[0]; digit_1; break; case 1: IND_PORT->ODR = led_buff[1]; digit_2; break; case 2: IND_PORT->ODR = led_buff[2]; digit_3; break; } if (++y>2)y=0; }
void indication_func() {
temp1 = temp;
temp_lcd1=temp_lcd2=temp_lcd3=0; while (temp1>99) { temp1-=100; temp_lcd3++; }
while (temp1>9) { temp1-=10; temp_lcd2++; }
while (temp1<10 && temp1!=0) { temp1--; temp_lcd1++; }
if(temp<10) { led_buff[2]=led_table[temp_lcd1]; led_buff[1]=led_table[10]; led_buff[0]=led_table[10]; } else if(temp>9 && temp<100) { led_buff[1]=led_table[temp_lcd1]; led_buff[2]=led_table[temp_lcd2]; led_buff[0]=led_table[10]; } else if(temp>99) { led_buff[0]=led_table[temp_lcd1]; led_buff[1]=led_table[temp_lcd2]; led_buff[2]=led_table[temp_lcd3]; } led_out(); } Хочу поместить в обработчик системного таймера функцию Код indication_func(); Никакими из всевозможных способов мне не получается это сделать.... Надо такое: в прерывании работает индикация и разложение числа на разряды, а в основном цикле я только отправляю в переменную значения. Код temp=111; Помогите пожалуйста! Буду очень благодарен!
Сообщение отредактировал Artos5 - Nov 12 2013, 08:00
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|