LINUX.ORG.RU

STM8, вывод - ЧЯДНТ?

 , ,


0

2

Собственно, пытаюсь помигать диодом (ну ладно - пока вообще просто запустить его) на плате с контроллером stm8s003f3. Нужно задействовать PD3. Собираю sdcc и stm8flash. Как я понимаю - я должен выставить единицы соответствующим битам в PD_DDR и в PD_ODR?

#include <stdint.h>
#define PD_ODR *(unsigned char*)0x500F
#define PD_DDR *(unsigned char*)0x5011

void delay(uint32_t t) {
	while (t) t--;
}

int main( void )
{
	uint8_t val = 0b11111111;
	PD_DDR=0b11111111;
	while (1) {
		val = val ^  0b11111111;
		PD_ODR = val;
		delay(20000);
	}
	return 0;
}

мейкфайл следующий :

CC=sdcc
CFLAGS=-mstm8
INCLUDEPATH=lib/stm8/inc/
DEFINES= STM8S003
SOURCE=src/main
OUTPUT_DIR=build/
all:	compile flash
compile:	
	mkdir -p $(OUTPUT_DIR)
	$(CC) $(CFLAGS) -I $(INCLUDEPATH) -D $(DEFINES) -o $(OUTPUT_DIR) $(SOURCE).c 
flash:	
	stm8flash -c stlinkv2 -p stm8s003 -w build/main.ihx

Но на выходе имею 0. При этом, при попытке залить тем же stm8flash заранее слитую родную прошивку - она работает корректно.

upd. Однако, одна глупая ошибка была - но по исправлении ничего не поменялось. Новый код в посте.



Последнее исправление: alex4321 (всего исправлений: 2)

Надо еще, как минимум, прописать 0xff в CR1 регистр (сделать выход push-pull)

anonymous
()
Ответ на: комментарий от anonymous

Спасибо, теперь - другое дело.

#include <stdint.h>
#define PD_ODR *(unsigned char*)0x500F
#define PD_DDR *(unsigned char*)0x5011
#define PD_CR1 *(unsigned char*)0x5012

void delay(uint32_t t) {
	while (t) t--;
}

int main( void )
{
	uint8_t val = 0b11111111;
	PD_DDR=0b11111111;
	PD_CR1=0b11111111;
	while (1) {
		PD_ODR = val;
		delay(20000);
		val = val ^  0b11111111;
	}
	return 0;
}
alex4321
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.