|
|
  |
Проблемы с STM8 |
|
|
|
May 19 2010, 17:58
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Проблема состоит в конфигурации портов В/В. Имею контроллер STM8S103K. Для начала решил попробовать использовать порт как обычный счетчик и посмотреть на нем сигналы. Для этого выбрал PORTB. Сконфигуриловал его как порт вывода. В бесконечном цикле наращиваю счетчик на 1 Код 1$: inc PB_ODR jra 1$ Смотрю сигналы на выводах порта. А сигналов там вовсе и нет. На паре выводов низкий уровень (true open drain), на остальных - высокий. Попробовал использовать другой порт - PORTC. Абсолютно все то же самое. Взял третий - PORTD. Вроде и работает, но не совсем. На разрядах 0, 7 высокий уровень, на остальных как и положено - меандр. Попробовал чуть усложнить код Код 1$: inc PB_ODR mov PD_ODR, PB_ODR jra 1$ Абсолютно ничего не изменилось. На разрядах порта B постоянные уровни, на разрядах 1-6 порта D - меандр. Вот и ломаю голову - что я сделал не так? Смотрел фирменные библиотеки, каких-то особых хитростей по конфигурации портов не увидел. Можно предположить, что я при пайке спалил выходы портов. Но это маловероятно. На всякий случай решил собрать еще одну платку с контроллером и посмотреть что будет. PS: А контроллер мне нравится все больше и больше. Вот только бы заставить его работать нормально.
Сообщение отредактировал _Bill - May 19 2010, 18:07
|
|
|
|
|
May 19 2010, 18:37
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(scifi @ May 19 2010, 22:31)  IMHO, нужно, чтобы счётчик крутился во внутренней памяти, а наружу выводить копию счётчика. И так тоже делал, разницы нет.
|
|
|
|
|
May 20 2010, 09:14
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(Dog Pawlowa @ May 20 2010, 10:37)  Так выложите, как Вы конфигурируете, сравню с библиотечными. Светодиод то моргает.  Нет светодиод не мигает. Я пока все осциллографом смотрю. А код... вот он Код ; ; ** InitPorts -- функция инициализации портов В/В ; InitPorts: ld a, #0FFh ; Initiate ports ld PB_DDR, a ; ld PB_CR1, a ; ld PD_DDR, a ; ld PD_CR1, a ; ld PD_CR2, a ; ; ld a, #LED_MASK ; Установить порт управления LED драйвером на вывод ; ld LED_DDR, a ; ; ld LED_CR1, a ; включить push-pull режим ; clr LED_PORT ; Сбросить порт ret ; ; ***** main - головная функция ***** ; _main: ldw x, #RAM_END ; Инициализировать стек ldw sp, x ; bset SWEN ; Switch clock to HSE mov CLK_SWR, #0xB4 ; callr InitPorts ; Инициализировать порты
1$: ;;; Бесконечный цикл ; btjf TIM_05, 2$ ; Проверить флаг события и переход, если не установлен ; bres TIM_05 ; Сбросить флаг ; callr Bin2BCD ; Преобразовать новое значение счетчикак для вывода ;2$: ; callr LEDout ; Вывод значения счетчика на индикатор ; inc PB_ODR ; Use ports a a binary counter inc PD_ODR ; bcpl PB_ODR, #1 bcpl PD_ODR, #1 bcpl PD_ODR, #6 bres PD_ODR, #0 jra 1$;;;
|
|
|
|
|
May 20 2010, 10:04
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(_Bill @ May 20 2010, 12:14)  Нет светодиод не мигает. У меня диод мигает при использовании функции из библиотеки, содержащей GPIOx->ODR ^=(u8) mask; А порт конфигурируется в режим GPIO_MODE_OUT_PP_LOW_FAST, т.е. вроде вижу по тексту - и в CR2 записывается 1. После обеда гляну с отладчиком.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
May 20 2010, 10:10
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(Dog Pawlowa @ May 20 2010, 14:04)  У меня диод мигает при использовании функции из библиотеки, содержащей GPIOx->ODR ^=(u8) mask;
А порт конфигурируется в режим GPIO_MODE_OUT_PP_LOW_FAST, т.е. вроде вижу по тексту - и в CR2 записывается 1. После обеда гляну с отладчиком. Это все в "железе" работает?
|
|
|
|
|
May 20 2010, 10:42
|
Частый гость
 
Группа: Свой
Сообщений: 152
Регистрация: 21-12-05
Из: Москва
Пользователь №: 12 476

|
Взял STM8S - Discovery, подаренный на компэловском семинаре, написал простецкую программу, как раз по вашему случаю. По - поводу написания и всего остального прошу не пинать, в связи с отсутствием времени получилось вот так и все работает
/* MAIN.C file * * Copyright © 2002-2005 STMicroelectronics */
#include "STM8S105C6.h"
void GPIO_Conf(void) { PD_DDR = 0xFF; // all PD pins as output PD_CR1 = 0xFF; // all PD pins output push pull PD_CR2 = 0; // all PD pins speed 2MHz PD_ODR = 0; // all set to 0 }
void main() { unsigned long int i; GPIO_Conf(); while (1) { for(i = 0; i < 10000; i++); PD_ODR = PD_ODR ^ 0xFF; } }
А почему вы тут сразу 2 порта настраиваете, порт B и D: InitPorts: ld a, #0FFh ; Initiate ports ld PB_DDR, a ; ld PB_CR1, a ; ld PD_DDR, a ; ld PD_CR1, a ; ld PD_CR2, a ;
Сообщение отредактировал topkin - May 20 2010, 10:44
|
|
|
|
|
May 20 2010, 12:58
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(topkin @ May 20 2010, 15:37)  При беглом просмотре вашего кода ошибок не видно, может быть Stanislav_S прав про частоту? Попробуйте сделать совсем просто, к примеру как в моем коде или скомпилируйте и прошейте его, поменяв только заголовочник и порт. Плюс ватч дог у вас отключен? Может дело в нем. По умолчанию он должен быть отключен, но, если я не ошибаюсь, конфигурация периферии и ватч дога в частности, задается в options bytes и далее работа контроллера при включении питания будет зависеть от настроект в этих байтах. Я проверял программу с использованием фабричных установок (частота внутреннего генератора / 8 = 2МГц). Разницы абсолютно никакой. И потом, у порта D не работает самый старший разряд, а все остальные, за исключением самого младшего, работают. Пробовал управлять скоростью нарастания на выходе порта при помощи регистра CR2, разница в длительности фронтов заметна, но работоспособности никак не сказывается. Что касается Watchdog таймера, то он у меня отключен. Даже если бы он был включен, то при правильной работе сигналы на выходах портов все равно были бы видны, разница между периодом Watchdog таймера и цикла программы составляет несколько порядков.
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|