DM00024550_STM8S003F3_Datasheet
PM0044_STM8 CPU programming manualpd
RM0016_STM8S_STM8A_Reference manual
알리에서 싸다고 몇개 구매했는데…. 지금 생각해보니 저렴하지 않은듯.. (2.5$)
회로도를 구하지 못했다.. J2를 쇼트시키면 PA3에 LED가 연결되어 있다
짜깁기 하여 IRQ로 UART 처리하는 코드
#include <string.h> #include "stm8s.h" // stm9l.h랑 다른거다, 다른부분 다 비슷한데 CLK 부분이 DS랑 좀 다르다... int uart_write(const char *str) { char i; for(i = 0; i < strlen(str); i++) { USART1_DR = str[i]; while(!(USART1_SR & USART_SR_TXE)); } return(i); // Bytes sent } unsigned char GetByte(void) { while (!(USART1_SR & USART_SR_RXNE)); return USART1_DR; } void PutByte(unsigned char Data) { USART1_DR = Data; while (!(USART1_SR & USART_SR_TXE)); } void USART_RX_ISR(void) __interrupt 18 { uart_write("GOT ST "); PutByte(GetByte()); uart_write("\r\n"); } int main() { int d; PA_DDR = 0x08; // PA3 PA_CR1 = 0x08; CLK_DIVR = 0x00; // Set the frequency to 16 MHz CLK_PCKENR1 = 0x08; // Enable UART1 USART1_CR2 = USART_CR2_TEN | USART_CR2_REN |USART_CR2_RIEN; // Allow TX & RX USART1_CR3 &= ~(USART_CR3_STOP1 | USART_CR3_STOP2); // 1 stop bit USART1_BRR2 = 0x03; USART1_BRR1 = 0x68; // 9600 baud __asm__("rim"); // Enable Interrupt while(1) { //PA_ODR ^= 0x08; for(d = 0; d < 29000; d++); //uart_write("Hello World!\r\n"); //PutByte(GetByte()); } }
TIM1_CH3에 PWM 출력샘플 (아 이거하느라고 되게 애먹었는데.. OISR에서 or 연산이 제대로 안되서 그랬던거같다….)
int main() { TIM1_ARRH = 0x0F; TIM1_ARRL = 0xFF; TIM1_PSCRH = 0x00; TIM1_PSCRL = 0x00; TIM1_CR1 = 0x00; TIM1_RCR = 0; TIM1_CCER2 = 0x0f; TIM1_CCMR3 = 0x70; TIM1_OISR = 0x7F; TIM1_CCR3H = 0x03; TIM1_CCR3L = 0xFF; TIM1_CR1 =0x01; TIM1_BKR = 0x80; while(1); return 0; }
사용한 Makefile
SDCC=sdcc SDLD=sdld OBJECTS=myStm8.ihx OBJECT=myStm8 .PHONY: all clean flash all: $(OBJECTS) clean: rm -f $(OBJECTS) flash: $(OBJECT).ihx stm8flash -cstlinkv2 -pstm8s003f3 -w $(OBJECT).ihx %.ihx: %.c $(SDCC) -lstm8 -mstm8 --out-fmt-ihx $(CFLAGS) $(LDFLAGS) $<
이왕 환경구성한거 몇개 더샀다
저렴하다(0.78$) 크리스탈이 없다(내부클럭 쓰나?…)
http://www.aliexpress.com/item/1pcs-lot-STM8S103F3P6-system-board-STM8S-STM8-development-board-minimum-core-board/32524292414.html