├── LICENSE ├── Makefile ├── README.md ├── device └── usb │ ├── usb.c │ ├── usb.h │ ├── usb_rx.S │ └── usb_tx.S ├── main.c ├── main.h ├── mcu ├── peripherals │ └── mcu_gpio.h ├── std_lib │ ├── Release_Notes.html │ ├── inc │ │ ├── stm8s.h │ │ ├── stm8s_adc1.h │ │ ├── stm8s_adc2.h │ │ ├── stm8s_awu.h │ │ ├── stm8s_beep.h │ │ ├── stm8s_can.h │ │ ├── stm8s_clk.h │ │ ├── stm8s_exti.h │ │ ├── stm8s_flash.h │ │ ├── stm8s_gpio.h │ │ ├── stm8s_i2c.h │ │ ├── stm8s_itc.h │ │ ├── stm8s_iwdg.h │ │ ├── stm8s_rst.h │ │ ├── stm8s_spi.h │ │ ├── stm8s_tim1.h │ │ ├── stm8s_tim2.h │ │ ├── stm8s_tim3.h │ │ ├── stm8s_tim4.h │ │ ├── stm8s_tim5.h │ │ ├── stm8s_tim6.h │ │ ├── stm8s_uart1.h │ │ ├── stm8s_uart2.h │ │ ├── stm8s_uart3.h │ │ └── stm8s_wwdg.h │ └── src │ │ ├── stm8s_adc1.c │ │ ├── stm8s_adc2.c │ │ ├── stm8s_awu.c │ │ ├── stm8s_beep.c │ │ ├── stm8s_can.c │ │ ├── stm8s_clk.c │ │ ├── stm8s_exti.c │ │ ├── stm8s_flash.c │ │ ├── stm8s_gpio.c │ │ ├── stm8s_i2c.c │ │ ├── stm8s_itc.c │ │ ├── stm8s_iwdg.c │ │ ├── stm8s_rst.c │ │ ├── stm8s_spi.c │ │ ├── stm8s_tim1.c │ │ ├── stm8s_tim2.c │ │ ├── stm8s_tim3.c │ │ ├── stm8s_tim4.c │ │ ├── stm8s_tim5.c │ │ ├── stm8s_tim6.c │ │ ├── stm8s_uart1.c │ │ ├── stm8s_uart2.c │ │ ├── stm8s_uart3.c │ │ └── stm8s_wwdg.c ├── stm8_interrupt_vector.c ├── stm8s003f3.ini ├── stm8s003f3.lsf ├── stm8s_conf.h ├── stm8s_it.c └── stm8s_it.h ├── target └── target.s19 └── utility ├── macros.c └── macros.h /Makefile: -------------------------------------------------------------------------------- 1 | #========================================================== 2 | # Makefile for STM8 3 | # Denis Zheleznyakov aka ZiB @ http://ziblog.ru 4 | #========================================================== 5 | 6 | SRC_C = usb.c 7 | SRC_C += main.c 8 | SRC_C += macros.c 9 | SRC_C += stm8_interrupt_vector.c 10 | SRC_C += stm8s_it.c 11 | SRC_C += stm8s_clk.c 12 | SRC_C += stm8s_tim1.c 13 | SRC_C += stm8s_tim2.c 14 | SRC_C += stm8s_tim4.c 15 | SRC_C += stm8s_uart1.c 16 | 17 | SRC_S += usb_rx.S 18 | SRC_S += usb_tx.S 19 | 20 | CROSS_PATH = D:/Tools/Cosmic/ 21 | CROSS = $(CROSS_PATH)/4.3.7/ 22 | 23 | INCLUDES += -imcu 24 | INCLUDES += -imcu/peripherals 25 | INCLUDES += -imcu/startup 26 | INCLUDES += -imcu/std_lib/inc 27 | INCLUDES += -imcu/std_lib/src 28 | INCLUDES += -idevice 29 | INCLUDES += -idevice/usb 30 | INCLUDES += -iutility 31 | 32 | VPATH += mcu 33 | VPATH += mcu/peripherals 34 | VPATH += mcu/startup 35 | VPATH += mcu/std_lib/inc 36 | VPATH += mcu/std_lib/src 37 | VPATH += device 38 | VPATH += device/usb 39 | VPATH += utility 40 | 41 | FLAGS_C = +debug +warn +modsl0 -pxp -pp +fast +split -l -gge -pge 42 | 43 | all: clean 44 | @make -s -j job 45 | @echo '-----------------------------------------------------------' 46 | @$(CROSS)cobj -n target/target.sm8 | $(CROSS_PATH)cosmic_format 'mcu/stm8s003f3.lsf' 47 | @make -s mcu_program 48 | 49 | job: target.elf 50 | 51 | git: 52 | @C:/Tools/git/extensions/gitex browse . 53 | 54 | git_commit: 55 | @C:/Tools/git/extensions/gitex commit . 56 | 57 | mcu_all: all 58 | @make -s mcu_program 59 | 60 | %.elf: $(SRC_C:%.c=target/%.o) $(SRC_S:%.S=target/%.o) 61 | @echo '-----------------------------------------------------------' 62 | @echo linking: $@ 63 | @$(CROSS)clnk -l'$(CROSS)/Lib' -o'target/target.sm8' -m'target/target.map' -sa 'mcu/*.lsf' 64 | @$(CROSS)cvdwarf target/target.sm8 65 | @$(CROSS)chex -o target/target.s19 target/target.sm8 66 | @rm -f target/*.o 67 | 68 | $(SRC_C:%.c=target/%.o): target/%.o: %.c 69 | @$(CROSS)cxstm8 $(FLAGS_C) $(INCLUDES) -i. -i$(CROSS)/Hstm8 -cl'target' -co'target' $< 70 | 71 | $(SRC_S:%.S=target/%.o): target/%.o: %.S 72 | @$(CROSS)cxstm8 +debug +warn -l -no $(INCLUDES) -i. -i$(CROSS)/Hstm8 -cl'target' -co'target' $< 73 | 74 | size: 75 | @echo '-----------------------------------------------------------' 76 | @$(CROSS)cobj -n target/target.sm8 | $(CROSS_PATH)cosmic_format 'mcu/stm8s003f3.lsf' 77 | 78 | clean: 79 | @echo '-----------------------------------------------------------' 80 | @mkdir -p target 81 | @rm -f target/*.* 82 | 83 | mcu_program: 84 | @D:/Tools/STMicroelectronics/toolset/stvp/STVP_CmdLine.exe -BoardName=ST-LINK -Device=STM8S003F3 -Port=USB -ProgMode=SWIM -no_loop -no_log -FileProg=target/target.s19 85 | 86 | mcu_restart: 87 | @D:/Tools/STMicroelectronics/toolset/stvd/gdb7.exe --quiet --command=mcu/stm8s003f3.ini -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2014-02-STM8S-USB 2 | ================= 3 | 4 | Sowftware USB on STM8S 5 | -------------------------------------------------------------------------------- /device/usb/usb.c: -------------------------------------------------------------------------------- 1 | /* 2 | * File: usb.c 3 | * Date: 07.02.2014 4 | * Denis Zheleznyakov aka ZiB @ http://ziblog.ru 5 | */ 6 | 7 | #include "main.h" 8 | 9 | extern void usb_tx(void); 10 | 11 | uint8_t usb_rx_buffer[16]; 12 | 13 | uint8_t * usb_tx_buffer_pointer; 14 | 15 | uint8_t usb_tx_count; 16 | uint8_t usb_rx_count; 17 | 18 | enum usb_settings 19 | { 20 | USB_VENDOR_ID_LOW = 0x11, // 21 | USB_VENDOR_ID_HIGH = 0x22, 22 | USB_DEVICE_ID_LOW = 0x33, // 23 | USB_DEVICE_ID_HIGH = 0x44, 24 | USB_DEVICE_VERSION_LOW = 0x55, // 25 | USB_DEVICE_VERSION_HIGH = 0x66 26 | }; 27 | 28 | const uint8_t usb_device_descriptor[] = { 18, // размер дескриптора (байт) 29 | 1, // тип дескриптора - устройство = 1 30 | 0x00, 0x01, // номер спецификации USB (USB 1.1 как 0x0110 и USB 1.0 как 0x0100) 31 | 0xFF, // код класса назначен вендором ! 32 | 0x00, // код подкласса 33 | 0, // код протокола 34 | 8, // максимальный размер пакета, для LS 8 байт 35 | USB_VENDOR_ID_LOW, USB_VENDOR_ID_HIGH, // VID 36 | USB_DEVICE_ID_LOW, USB_DEVICE_ID_HIGH,// PID 37 | USB_DEVICE_VERSION_LOW, USB_DEVICE_VERSION_HIGH, // версия устройства 38 | 0, // индекс строки описания производителя 39 | 0, // индекс строки описания продукта 40 | 0, // индекс строки серийного номера 41 | 1, // кол-во конфигураций 42 | }; 43 | 44 | const uint8_t usb_configuration_descriptor[] = { 9, // размер дескриптора (байт) 45 | 2, // тип дескриптора - конфигурация = 2 46 | 18, 0, // полная длина возвращаемых данных в байтах 47 | 1, // количество интерфейсов 48 | 1, // номер конфигурации 49 | 0, // индекс строки описания конфигурации 50 | 0x80, // аттрибуты (D7 всегда 1, D6 - питание не от USB, D5 - пробуждение) 51 | 50, // максимальный ток потребления в мА деленный на 2 52 | }; 53 | 54 | const uint8_t usb_interface_descriptor[] = { 9, // размер дескриптора (байт) 55 | 4, // тип дескриптора - интерфейс = 4 56 | 1, // количество интерфейсов 57 | 0, // альтернативная установка (не понял для чего) 58 | 1, // кол-во точек используемых интерфейсом 59 | 0, // код класса 60 | 0, // код подкласса 61 | 0, // код протокола 62 | 0, // индекс строки описания интерфейса 63 | }; 64 | 65 | const uint8_t usb_endpoint_descriptor[] = { 7, // размер дескриптора (байт) 66 | 5, // тип дескриптора - конечная точка = 5 67 | 0x81, // адрес и направление конечной точки (IN 0x81) 68 | 0x03, // аттрибут - тип передач прерывание 69 | 8, 0, // максимальный размер пакета, для LS 8 байт 70 | 10 // интервал опроса конечной точки в фреймах (для LS - 1 мс) 71 | }; 72 | 73 | enum usb_events_list 74 | { 75 | USB_EVENT_NO = 0, // 76 | USB_EVENT_RECEIVE_SETUP_DATA = 1, // приняты данные токена SETUP 77 | USB_EVENT_READY_DATA_IN = 2, // готовы данные для передачи в ПК 78 | USB_EVENT_WAIT_DATA_IN = 3, // ожидание готовности данных для передачи в ПК 79 | USB_EVENT 80 | }; 81 | 82 | enum usb_states_list 83 | { 84 | USB_STATE_IDLE = 0, // 85 | USB_STATE_SETUP = 1, 86 | USB_STATE_IN = 2, 87 | USB_STATE_OUT = 3, 88 | USB_STATE_DATA = 4, 89 | USB_STATE_ADDRESS_CHANGE = 5 90 | }; 91 | 92 | enum usb_packets_id_list 93 | { 94 | USB_PID_SETUP = 0x2D, // 95 | USB_PID_DATA0 = 0xC3, 96 | USB_PID_DATA1 = 0x4B, 97 | USB_PID_IN = 0x69, // данные для ПК 98 | USB_PID_OUT = 0xE1, // данные от ПК 99 | USB_PID_ACK = 0xD2, 100 | USB_PID_NACK = 0x5A, 101 | USB_PID_STALL = 0x1E 102 | }; 103 | 104 | enum usb_request_standart_type_list 105 | { 106 | USB_REQUEST_TYPE_TO_DEVICE = 0x00, // 107 | USB_REQUEST_TYPE_TO_INTERFACE = 0x01, // 108 | USB_REQUEST_TYPE_TO_ENDPOINT = 0x02, // 109 | USB_REQUEST_TYPE_FROM_DEVICE = 0x80, // 110 | USB_REQUEST_TYPE_FROM_INTERFACE = 0x81, // 111 | USB_REQUEST_TYPE_FROM_ENDPOINT = 0x82 112 | }; 113 | 114 | enum usb_request_list 115 | { 116 | USB_REQUEST_GET_STATUS = 0x00, // 117 | USB_REQUEST_SET_ADDRESS = 0x05, 118 | USB_REQUEST_GET_DESCRIPTOR = 0x06, 119 | USB_REQUEST_SET_DESCRIPTOR = 0x07, 120 | USB_REQUEST_GET_CONFIGURATION = 0x08, 121 | USB_REQUEST_SET_CONFIGURATION = 0x09 122 | }; 123 | 124 | struct usb_type 125 | { 126 | volatile uint8_t state; 127 | volatile uint8_t event; 128 | volatile uint8_t device_address; 129 | 130 | uint8_t endpoint_number; 131 | uint8_t setup_address; 132 | uint8_t setup_endpoint; 133 | 134 | uint8_t rx_buffer[16]; 135 | uint8_t rx_lenght; 136 | 137 | uint8_t tx_buffer[16]; 138 | uint8_t tx_lenght; 139 | uint8_t tx_is_all; 140 | } usb; 141 | 142 | void usb_init(void) 143 | { 144 | usb.state = USB_STATE_IDLE; 145 | usb.event = USB_EVENT_NO; 146 | usb.device_address = 0; 147 | usb.tx_is_all = TRUE; 148 | } 149 | 150 | void usb_send_nack(void) 151 | { 152 | uint8_t data[2]; 153 | 154 | GPIOC->ODR = 0x40; 155 | GPIOC->CR1 = 0xFF; 156 | GPIOC->CR2 = 0xFF; 157 | GPIOC->DDR = 0xFF; 158 | 159 | data[0] = 0x80; 160 | data[1] = USB_PID_NACK; 161 | 162 | usb_tx_count = 2; 163 | usb_tx_buffer_pointer = &data[0]; 164 | 165 | usb_tx(); 166 | 167 | nop(); 168 | nop(); 169 | nop(); 170 | nop(); 171 | nop(); 172 | nop(); 173 | 174 | GPIOC->CR2 = 0x00; 175 | GPIOC->CR1 = 0x00; 176 | GPIOC->DDR = 0x3F; 177 | } 178 | 179 | void usb_send_ack(void) 180 | { 181 | uint8_t data[2]; 182 | 183 | GPIOC->ODR = 0x40; 184 | GPIOC->CR1 = 0xFF; 185 | GPIOC->CR2 = 0xFF; 186 | GPIOC->DDR = 0xFF; 187 | 188 | data[0] = 0x80; 189 | data[1] = USB_PID_ACK; 190 | 191 | usb_tx_count = 2; 192 | usb_tx_buffer_pointer = &data[0]; 193 | 194 | usb_tx(); 195 | 196 | nop(); 197 | nop(); 198 | nop(); 199 | nop(); 200 | nop(); 201 | nop(); 202 | 203 | GPIOC->CR2 = 0x00; 204 | GPIOC->CR1 = 0x00; 205 | GPIOC->DDR = 0x3F; 206 | } 207 | 208 | uint8_t count = 0; 209 | 210 | @inline void usb_send_answer(void) 211 | { 212 | GPIOC->ODR = 0x40; 213 | GPIOC->CR1 = 0xFF; 214 | GPIOC->CR2 = 0xFF; 215 | GPIOC->DDR = 0xFF; 216 | 217 | usb_tx_count = usb.tx_lenght; 218 | usb_tx_buffer_pointer = &usb.tx_buffer[0]; 219 | 220 | usb_tx(); 221 | 222 | nop(); 223 | nop(); 224 | nop(); 225 | nop(); 226 | nop(); 227 | nop(); 228 | 229 | GPIOC->CR2 = 0x00; 230 | GPIOC->CR1 = 0x00; 231 | GPIOC->DDR = 0x3F; 232 | } 233 | 234 | void usb_rx_ok(void) 235 | { 236 | switch (usb_rx_buffer[1]) 237 | { 238 | case (USB_PID_SETUP): 239 | { 240 | usb.state = USB_STATE_SETUP; 241 | 242 | break; 243 | } 244 | case (USB_PID_OUT): 245 | { 246 | usb.state = USB_STATE_OUT; 247 | 248 | break; 249 | } 250 | case (USB_PID_IN): 251 | { 252 | if (usb.event == USB_EVENT_READY_DATA_IN) 253 | { 254 | usb_send_answer(); 255 | 256 | usb.event = USB_EVENT_WAIT_DATA_IN; 257 | } 258 | else 259 | { 260 | usb_send_nack(); 261 | } 262 | 263 | usb.state = USB_STATE_IN; 264 | 265 | break; 266 | } 267 | case (USB_PID_DATA0): 268 | { 269 | if (usb.state == USB_STATE_SETUP) 270 | { 271 | usb.rx_buffer[0] = usb_rx_buffer[0]; 272 | usb.rx_buffer[1] = usb_rx_buffer[1]; 273 | usb.rx_buffer[2] = usb_rx_buffer[2]; 274 | usb.rx_buffer[3] = usb_rx_buffer[3]; 275 | usb.rx_buffer[4] = usb_rx_buffer[4]; 276 | usb.rx_buffer[5] = usb_rx_buffer[5]; 277 | usb.rx_buffer[6] = usb_rx_buffer[6]; 278 | usb.rx_buffer[7] = usb_rx_buffer[7]; 279 | usb.rx_buffer[8] = usb_rx_buffer[8]; 280 | usb.rx_buffer[9] = usb_rx_buffer[9]; 281 | usb.rx_buffer[10] = usb_rx_buffer[10]; 282 | usb.rx_buffer[11] = usb_rx_buffer[11]; 283 | usb.rx_buffer[12] = usb_rx_buffer[12]; 284 | usb.rx_buffer[13] = usb_rx_buffer[13]; 285 | usb.rx_buffer[14] = usb_rx_buffer[14]; 286 | usb.rx_buffer[15] = usb_rx_buffer[15]; 287 | 288 | usb_send_ack(); 289 | 290 | usb.event = USB_EVENT_RECEIVE_SETUP_DATA; 291 | } 292 | else if (usb.state == USB_STATE_OUT) 293 | { 294 | usb_send_ack(); 295 | 296 | usb.event == USB_EVENT_NO; 297 | } 298 | 299 | break; 300 | } 301 | case (USB_PID_DATA1): 302 | { 303 | if (usb.state == USB_STATE_OUT) 304 | { 305 | usb_send_ack(); 306 | 307 | usb.event == USB_EVENT_NO; 308 | } 309 | 310 | break; 311 | } 312 | case (USB_PID_ACK): 313 | { 314 | break; 315 | } 316 | case (USB_PID_NACK): 317 | { 318 | break; 319 | } 320 | default: 321 | { 322 | usb.state = USB_STATE_IDLE; 323 | 324 | break; 325 | } 326 | } 327 | } 328 | 329 | void usb_calc_crc16(uint8_t * buffer, uint8_t lenght) 330 | { 331 | uint16_t crc = 0xFFFF; 332 | uint8_t index; 333 | uint8_t i; 334 | 335 | for (index = 0; index < lenght; index++) 336 | { 337 | crc ^= *buffer++; 338 | 339 | for (i = 8; i--;) 340 | { 341 | if ((crc & BIT(0)) != 0) 342 | { 343 | crc >>= 1; 344 | crc ^= 0xA001; 345 | } 346 | else 347 | { 348 | crc >>= 1; 349 | } 350 | } 351 | } 352 | 353 | crc = ~crc; 354 | 355 | *buffer++ = (uint8_t) crc; 356 | *buffer = (uint8_t) (crc >> 8); 357 | } 358 | 359 | void usb_send_data(uint8_t * buffer, uint8_t lenght) 360 | { 361 | uint8_t data_sync = USB_PID_DATA1; 362 | uint8_t index; 363 | 364 | while (lenght > 0) 365 | { 366 | if (lenght >= 8) 367 | { 368 | usb.tx_lenght = 12; 369 | 370 | usb.tx_buffer[0] = 0x80; 371 | usb.tx_buffer[1] = data_sync; 372 | 373 | for (index = 2; index < 10; index++) 374 | usb.tx_buffer[index] = *buffer++; 375 | 376 | lenght -= 8; 377 | } 378 | else 379 | { 380 | usb.tx_lenght = (uint8_t) (4 + lenght); 381 | 382 | usb.tx_buffer[0] = 0x80; 383 | usb.tx_buffer[1] = data_sync; 384 | 385 | for (index = 2; index < 2 + lenght; index++) 386 | usb.tx_buffer[index] = *buffer++; 387 | 388 | lenght = 0; 389 | } 390 | 391 | // расчитываем контрольную сумму пакета 392 | usb_calc_crc16(&usb.tx_buffer[2], (uint8_t) (usb.tx_lenght - 4)); 393 | 394 | // обновляем пакет синхронизации 395 | if (data_sync == USB_PID_DATA1) 396 | data_sync = USB_PID_DATA0; 397 | else 398 | data_sync = USB_PID_DATA1; 399 | 400 | // сообщаем о готовности данных 401 | usb.event = USB_EVENT_READY_DATA_IN; 402 | 403 | while (usb.event == USB_EVENT_READY_DATA_IN) 404 | { 405 | if (usb.state != USB_STATE_IN) 406 | return; 407 | } 408 | } 409 | } 410 | 411 | uint8_t counter_a = 0; 412 | uint8_t counter_b = 0; 413 | uint8_t counter_all = 0; 414 | 415 | uint8_t tx_counter = 0; 416 | 417 | void usb_process(void) 418 | { 419 | if (usb.event == USB_EVENT_RECEIVE_SETUP_DATA) 420 | { 421 | switch (usb.rx_buffer[2]) 422 | { 423 | case (USB_REQUEST_TYPE_FROM_DEVICE): 424 | { 425 | switch (usb.rx_buffer[3]) 426 | { 427 | case (USB_REQUEST_GET_DESCRIPTOR): 428 | { 429 | if (usb.rx_buffer[5] == 1) 430 | usb_send_data(&usb_device_descriptor[0], ARRAY_LENGHT(usb_device_descriptor)); 431 | else if (usb.rx_buffer[5] == 2) 432 | usb_send_data(&usb_configuration_descriptor[0], ARRAY_LENGHT(usb_configuration_descriptor)); 433 | 434 | //if (usb.rx_buffer[5] == 0) 435 | // usb_send_data(&usb_device_descriptor[0], ARRAY_LENGHT(usb_device_descriptor)); 436 | 437 | // else if (usb.rx_buffer[5] == 2) 438 | // usb_send_data(&usb_interface_descriptor[0], ARRAY_LENGHT(usb_interface_descriptor)); 439 | 440 | break; 441 | } 442 | } 443 | 444 | break; 445 | } 446 | case (USB_REQUEST_TYPE_TO_DEVICE): 447 | { 448 | switch (usb.rx_buffer[3]) 449 | { 450 | case (USB_REQUEST_SET_ADDRESS): 451 | { 452 | usb.device_address = usb.rx_buffer[4]; 453 | 454 | usb.tx_lenght = 4; 455 | usb.tx_buffer[0] = 0x80; 456 | usb.tx_buffer[1] = USB_PID_DATA1; 457 | usb.tx_buffer[2] = 0; 458 | usb.tx_buffer[3] = 0; 459 | 460 | usb.event = USB_EVENT_READY_DATA_IN; 461 | 462 | break; 463 | } 464 | } 465 | 466 | break; 467 | } 468 | } 469 | } 470 | } 471 | -------------------------------------------------------------------------------- /device/usb/usb.h: -------------------------------------------------------------------------------- 1 | /* 2 | * File: usb.h 3 | * Date: 07.02.2014 4 | * Denis Zheleznyakov aka ZiB @ http://ziblog.ru 5 | */ 6 | 7 | #ifndef USB_H_ 8 | #define USB_H_ 9 | 10 | extern uint8_t usb_tx_count; 11 | 12 | extern uint8_t usb_tx_buffer[16]; 13 | 14 | void usb_init(void); 15 | void usb_process(void); 16 | 17 | #endif /* USB_H_ */ 18 | -------------------------------------------------------------------------------- /device/usb/usb_rx.S: -------------------------------------------------------------------------------- 1 | xref _usb_rx_count, _usb_rx_buffer, _usb_rx_ok 2 | 3 | xdef _usb_rx 4 | 5 | L_Bit0_Begin: 6 | cpl ($14,y) ; сигнал синхронизации 7 | srl ($01, SP) 8 | ld a,(y) 9 | jreq L_End_Rx ; выход, если input = 0 (конец пакета) 10 | xor a, ($01, SP) 11 | ld ($01, SP),a 12 | nop 13 | 14 | L_Bit1_Begin: 15 | cpl ($14,y) ; сигнал синхронизации 16 | srl ($01, SP) 17 | ld a,(y) 18 | jreq L_End_Rx ; выход, если input = 0 (конец пакета) 19 | xor a, ($01, SP) 20 | ld ($01, SP),a 21 | incw x 22 | nop 23 | 24 | L_Bit2_Begin: 25 | cpl ($14,y) ; сигнал синхронизации 26 | srl ($01, SP) 27 | ld a,(y) 28 | jreq L_End_Rx ; выход, если input = 0 (конец пакета) 29 | xor a, ($01, SP) 30 | ld ($01, SP),a 31 | nop 32 | nop 33 | 34 | L_Bit3_Begin: 35 | cpl ($14,y) ; сигнал синхронизации 36 | srl ($01, SP) 37 | ld a,(y) 38 | jreq L_End_Rx ; выход, если input = 0 (конец пакета) 39 | xor a, ($01, SP) 40 | ld ($01, SP),a 41 | nop 42 | 43 | L_Bit4_Begin: 44 | cpl ($14,y) ; сигнал синхронизации 45 | srl ($01, SP) 46 | ld a,(y) 47 | jreq L_End_Rx ; выход, если input = 0 (конец пакета) 48 | xor a, ($01, SP) 49 | ld ($01, SP),a 50 | nop 51 | 52 | L_Bit5_Begin: 53 | cpl ($14,y) ; сигнал синхронизации 54 | srl ($01, SP) 55 | ld a,(y) 56 | jreq L_End_Rx ; выход, если input = 0 (конец пакета) 57 | xor a, ($01, SP) 58 | ld ($01, SP),a 59 | dec ($02,SP) 60 | jreq L_End_Rx 61 | 62 | L_Bit6_Begin: 63 | cpl ($14,y) ; сигнал синхронизации 64 | srl ($01, SP) 65 | ld a,(y) 66 | jreq L_End_Rx ; выход, если input = 0 (конец пакета) 67 | xor a, ($01, SP) 68 | ld ($01, SP),a 69 | nop 70 | 71 | L_Bit7_Begin: 72 | cpl ($14,y) ; сигнал синхронизации 73 | srl ($01, SP) 74 | ld a,(y) 75 | jreq L_End_Rx ; выход, если input = 0 (конец пакета) 76 | xor a, ($01, SP) 77 | ld ($01, SP),a 78 | 79 | ld (x),a ; сохраняем принятый байт 80 | rlc (x) 81 | 82 | cpl ($14,y) ; сигнал синхронизации 83 | srl ($01, SP) 84 | ld a,(y) 85 | jreq L_End_Rx ; выход, если input = 0 (конец пакета) 86 | xor a, ($01, SP) 87 | ld ($01, SP),a 88 | 89 | jra L_Bit1_Begin 90 | 91 | nop 92 | nop 93 | nop 94 | 95 | L_End_Rx: 96 | 97 | pop a 98 | pop a 99 | ld _usb_rx_count,a 100 | 101 | call _usb_rx_ok 102 | 103 | clr 20495 104 | 105 | mov 21077,#251 ; сброс флага прерывания таймера 106 | 107 | bres 21072,#0 ; стоп таймер 108 | clr 21086 ; сброс счетного регистра 109 | clr 21087 ; 110 | 111 | iret 112 | 113 | ; 114 | ; 115 | ; 116 | 117 | _usb_rx: 118 | 119 | ldw x, #L_Delay_Begin ; адрес начала таблицы задержек 120 | addw x, 21086 ; + смещение (значение таймера) 121 | cpw x, #L_Delay_End ; проверка выхода за границу таблицы (защита!) 122 | jruge L_Error 123 | jp (x) ; переход по таблице задержек 124 | 125 | L_Error: 126 | 127 | iret ; аврийный выход 128 | 129 | L_Delay_Begin: 130 | nop 131 | nop 132 | nop 133 | nop 134 | nop 135 | nop 136 | nop 137 | nop 138 | nop 139 | nop 140 | nop 141 | nop 142 | nop 143 | nop 144 | nop 145 | nop 146 | nop 147 | nop 148 | nop 149 | nop 150 | nop 151 | nop 152 | nop 153 | nop 154 | nop 155 | nop 156 | nop 157 | nop 158 | nop 159 | nop 160 | nop 161 | nop 162 | nop 163 | nop 164 | 165 | L_Delay_End: 166 | 167 | ldw x, #_usb_rx_buffer ; адрес начала буфера 168 | ldw y, #20491 ; адрес входного сигнала 169 | ld a, #$0E ; максимальное кол-во принимаемых байт (защита!) 170 | push a 171 | ld a, #$80 172 | push a 173 | 174 | jra L_Bit0_Begin 175 | -------------------------------------------------------------------------------- /device/usb/usb_tx.S: -------------------------------------------------------------------------------- 1 | xref _usb_tx_count, _usb_tx_buffer_pointer 2 | 3 | xdef _usb_tx 4 | 5 | L_Bit0_Idle: 6 | nop 7 | nop 8 | dec a 9 | jrne L_Bit1_Begin 10 | nop 11 | nop 12 | nop 13 | cpl 20490 14 | nop 15 | nop 16 | ld a, #$06 17 | jra L_Bit1_Begin 18 | nop 19 | nop 20 | 21 | L_Bit1_Idle: 22 | nop 23 | nop 24 | dec a 25 | jrne L_Bit2_Begin 26 | nop 27 | nop 28 | nop 29 | cpl 20490 30 | nop 31 | nop 32 | ld a, #$06 33 | jra L_Bit2_Begin 34 | nop 35 | nop 36 | 37 | L_Bit2_Idle: 38 | nop 39 | dec a 40 | jrne L_Bit3_Begin 41 | nop 42 | nop 43 | nop 44 | nop 45 | cpl 20490 46 | nop 47 | ld a, #$06 48 | jra L_Bit3_Begin 49 | nop 50 | nop 51 | 52 | L_Bit3_Idle: 53 | nop 54 | nop 55 | nop 56 | dec a 57 | jrne L_Bit4_Begin 58 | nop; 59 | nop 60 | nop 61 | cpl 20490 62 | nop 63 | nop 64 | ld a, #$06 65 | jra L_Bit4_Begin 66 | nop 67 | nop 68 | ;nop 69 | 70 | 71 | L_Bit0_Begin: 72 | rrc (x) // бит 0 -> СC.C 73 | jrc L_Bit0_Idle // перейти, если равен CС.C = 1 74 | cpl 20490 // инверсия выходных сигналов [N,Z,C=1] 75 | ld a, #$06 // если была инверсия, сбрасываем 76 | nop 77 | nop 78 | nop 79 | nop 80 | 81 | L_Bit1_Begin: 82 | rrc (x) // бит 0 -> СC.C 83 | jrc L_Bit1_Idle // перейти, если равен CС.C = 1 84 | cpl 20490 // инверсия выходных сигналов [N,Z,C=1] 85 | ld a, #$06 86 | nop 87 | nop 88 | nop 89 | nop 90 | 91 | L_Bit2_Begin: 92 | rrc (x) // бит 0 -> СC.C 93 | jrc L_Bit2_Idle // перейти, если равен CС.C = 1 94 | cpl 20490 // инверсия выходных сигналов [N,Z,C=1] 95 | ld a, #$06 96 | nop 97 | nop 98 | nop 99 | ;nop 100 | 101 | L_Bit3_Begin: 102 | rrc (x) // бит 0 -> СC.C 103 | jrc L_Bit3_Idle // перейти, если равен CС.C = 1 104 | nop; 105 | cpl 20490 // инверсия выходных сигналов [N,Z,C=1] 106 | ld a, #$06 107 | nop 108 | nop 109 | nop 110 | nop 111 | 112 | L_Bit4_Begin: 113 | rrc (x) // бит 0 -> СC.C 114 | jrc L_Bit4_Idle // перейти, если равен CС.C = 1 115 | cpl 20490 // инверсия выходных сигналов [N,Z,C=1] 116 | ld a, #$06 117 | nop 118 | nop 119 | nop 120 | nop 121 | 122 | L_Bit5_Begin: 123 | rrc (x) // бит 0 -> СC.C 124 | jrc L_Bit5_Idle // перейти, если равен CС.C = 1 125 | cpl 20490 // инверсия выходных сигналов [N,Z,C=1] 126 | ld a, #$06 127 | nop 128 | nop 129 | nop 130 | nop 131 | 132 | L_Bit6_Begin: 133 | rrc (x) // бит 0 -> СC.C 134 | jrc L_Bit6_Idle // перейти, если равен CС.C = 1 135 | cpl 20490 // инверсия выходных сигналов [N,Z,C=1] 136 | ld a, #$06 137 | nop 138 | nop 139 | 140 | L_Bit7_Begin: 141 | rrc (x) // бит 0 -> СC.C 142 | jrc L_Bit7_Idle // перейти, если равен CС.C = 1 143 | nop 144 | nop 145 | cpl 20490 // инверсия выходных сигналов [N,Z,C=1] 146 | ld a, #$06 147 | 148 | L_Check_End: 149 | 150 | incw x 151 | dec _usb_tx_count 152 | jrne L_Bit0_Begin 153 | 154 | nop 155 | L_Tx_End: 156 | nop 157 | nop 158 | 159 | clr 20490 160 | 161 | ret 162 | 163 | nop 164 | nop 165 | nop 166 | nop 167 | 168 | ; 169 | ; 170 | ; 171 | nop 172 | 173 | L_Bit4_Idle: 174 | nop 175 | nop 176 | dec a 177 | jrne L_Bit5_Begin 178 | nop 179 | nop 180 | nop 181 | cpl 20490 182 | nop 183 | nop 184 | ld a, #$06 185 | jra L_Bit5_Begin 186 | nop 187 | 188 | nop 189 | L_Bit5_Idle: 190 | nop 191 | nop 192 | dec a 193 | jrne L_Bit6_Begin 194 | nop 195 | nop 196 | nop 197 | cpl 20490 198 | nop 199 | nop 200 | ld a, #$06 201 | jra L_Bit6_Begin 202 | nop 203 | nop 204 | 205 | L_Bit6_Idle: 206 | 207 | dec a 208 | jrne L_Bit7_Begin 209 | nop 210 | nop 211 | nop 212 | nop 213 | nop 214 | cpl 20490 215 | ld a, #$06 216 | jra L_Bit7_Begin 217 | nop 218 | nop 219 | nop 220 | 221 | L_Bit7_Idle: 222 | dec a 223 | jrne L_Check_End 224 | dec _usb_tx_count 225 | nop 226 | incw x 227 | nop 228 | ld a, #$06 229 | nop 230 | cpl 20490 231 | nop 232 | tnz _usb_tx_count 233 | jrne L_Bit0_Begin 234 | jra L_Tx_End 235 | 236 | ; 237 | ; Точка входа 238 | ; 239 | _usb_tx: 240 | 241 | ldw x, _usb_tx_buffer_pointer 242 | 243 | ld a,#$40 244 | ld 20490,a 245 | 246 | ld a, #$06 ; счет 247 | 248 | jra L_Bit0_Begin 249 | -------------------------------------------------------------------------------- /main.c: -------------------------------------------------------------------------------- 1 | /* 2 | * File: main.c 3 | * Date: 02.01.2013 4 | * Denis Zheleznyakov aka ZiB @ http://ziblog.ru 5 | */ 6 | 7 | #include "main.h" 8 | 9 | volatile uint32_t timer; 10 | 11 | @inline static void gpio_init(void) 12 | { 13 | // перевод всех линий на вход с подтяжкой к плюсу 14 | GPIOA->CR1 = 0xFF; 15 | GPIOB->CR1 = 0xFF; 16 | GPIOC->CR1 = 0xFF; 17 | GPIOD->CR1 = 0xFF; 18 | GPIOE->CR1 = 0xFF; 19 | GPIOF->CR1 = 0xFF; 20 | 21 | // Входные линии USB 22 | GPIOC->CR1 = 0; 23 | GPIOC->CR2 = 0; 24 | GPIOC->DDR = 0x3F; 25 | GPIOC->ODR = 0; 26 | 27 | // 1,5 kOm 28 | GPIOA->DDR = 0x00; 29 | GPIOA->ODR = 0x00; 30 | GPIOA->CR1 = 0x00; 31 | GPIOA->CR2 = 0x00; 32 | } 33 | 34 | @inline static void clock_init(void) 35 | { 36 | // после сброса микроконтроллер работает от встроенного HSI-генератора 37 | // с делителем по умолчанию 8, меняем его на 1 38 | CLK->CKDIVR = 0; 39 | 40 | // переключаемся на внешний кварцевый резонатор 41 | CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE); 42 | } 43 | 44 | @inline static void timers_init(void) 45 | { 46 | CLK->PCKENR1 |= CLK_PCKENR1_TIM1; 47 | 48 | // таймер 1 - "захват" первого импульса USB посылки 49 | TIM1_TimeBaseInit(0, TIM1_PSCRELOADMODE_UPDATE, 1000, 0); 50 | // захват сигнала по линии USB D- 51 | TIM1_ICInit(TIM1_CHANNEL_2, TIM1_ICPOLARITY_FALLING, TIM1_ICSELECTION_DIRECTTI, TIM1_ICPSC_DIV1, 0x02); 52 | TIM1_SelectInputTrigger(TIM1_TS_TI2FP2); 53 | TIM1_SelectSlaveMode(TIM1_SLAVEMODE_TRIGGER); 54 | TIM1_ClearFlag(TIM1_FLAG_CC2); 55 | TIM1_ITConfig(TIM1_IT_CC2, ENABLE); 56 | } 57 | 58 | void main(void) 59 | { 60 | disableInterrupts(); 61 | 62 | gpio_init(); 63 | 64 | clock_init(); 65 | 66 | timers_init(); 67 | 68 | enableInterrupts(); 69 | 70 | // delay 71 | timer = 500000; 72 | while(timer-- > 0) 73 | { 74 | } 75 | 76 | // 1,5 kOm 77 | GPIOA->DDR = 0xff; 78 | GPIOA->ODR = 0xff; 79 | GPIOA->CR1 = 0xff; 80 | GPIOA->CR2 = 0xff; 81 | 82 | while(1) 83 | { 84 | usb_process(); 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /main.h: -------------------------------------------------------------------------------- 1 | /* 2 | * File: main.h 3 | * Date: 02.01.2013 4 | * Denis Zheleznyakov aka ZiB @ http://ziblog.ru 5 | */ 6 | 7 | #ifndef MAIN_H_ 8 | #define MAIN_H_ 9 | 10 | #include "stm8s.h" 11 | 12 | #include "macros.h" 13 | 14 | #include "mcu_gpio.h" 15 | 16 | #include "usb.h" 17 | 18 | #endif /* MAIN_H_ */ 19 | -------------------------------------------------------------------------------- /mcu/peripherals/mcu_gpio.h: -------------------------------------------------------------------------------- 1 | /* 2 | * File: mcu_gpio.h 3 | * Date: 23.01.2011 4 | * Denis Zheleznjakov @ ZiBlog.ru 5 | */ 6 | 7 | #ifndef MCU_GPIO_H_ 8 | #define MCU_GPIO_H_ 9 | 10 | // PIN_TEST A, 3, HIGH, INPUT_FLOATING_WITHOUT_ITERRUPT 11 | 12 | #define INPUT_FLOATING_WITHOUT_ITERRUPT INPUT_FLOATING_WITHOUT_ITERRUPT 13 | #define INPUT_FLOATING_WITH_ITERRUPT INPUT_FLOATING_WITH_ITERRUPT 14 | #define INPUT_PULL_UP_WITHOUT_ITERRUPT INPUT_PULL_UP_WITHOUT_ITERRUPT 15 | #define INPUT_PULL_UP_WITH_ITERRUPT INPUT_PULL_UP_WITH_ITERRUPT 16 | #define OUTPUT_OPEN_DRAIN_NOSPEED_LIMIT OUTPUT_OPEN_DRAIN_NOSPEED_LIMIT 17 | #define OUTPUT_OPEN_DRAIN_SPEED_LIMIT_10MHZ OUTPUT_OPEN_DRAIN_SPEED_LIMIT_10MHZ 18 | #define OUTPUT_PUSH_PULL_NOSPEED_LIMIT OUTPUT_PUSH_PULL_NOSPEED_LIMIT 19 | #define OUTPUT_PUSH_PULL_SPEED_LIMIT_10MHZ OUTPUT_PUSH_PULL_SPEED_LIMIT_10MHZ 20 | 21 | //------------------------------------------------------------------------------ 22 | #define GPIO_PIN_CONFIGURATION_OUTPUT_PUSH_PULL_SPEED_LIMIT_10MHZ(PORT, PIN, LEVEL, MODE) \ 23 | { \ 24 | GPIO##PORT->DDR |= (1 << PIN); \ 25 | GPIO##PORT->CR1 |= (1 << PIN); \ 26 | GPIO##PORT->CR2 |= (1 << PIN); \ 27 | } 28 | 29 | #define GPIO_PIN_CONFIGURATION_OUTPUT_PUSH_PULL_NOSPEED_LIMIT(PORT, PIN, LEVEL, MODE) \ 30 | { \ 31 | GPIO##PORT->DDR |= (1 << PIN); \ 32 | GPIO##PORT->CR1 |= (1 << PIN); \ 33 | GPIO##PORT->CR2 &= (uint8_t)(~(1 << PIN)); \ 34 | } 35 | 36 | #define GPIO_PIN_CONFIGURATION_OUTPUT_OPEN_DRAIN_SPEED_LIMIT_10MHZ(PORT, PIN, LEVEL, MODE) \ 37 | { \ 38 | GPIO##PORT->DDR |= (1 << PIN); \ 39 | GPIO##PORT->CR1 &= (uint8_t)(~(1 << PIN)); \ 40 | GPIO##PORT->CR2 |= (1 << PIN); \ 41 | } 42 | 43 | #define GPIO_PIN_CONFIGURATION_OUTPUT_OPEN_DRAIN_NOSPEED_LIMIT(PORT, PIN, LEVEL, MODE) \ 44 | { \ 45 | GPIO##PORT->DDR |= (1 << PIN); \ 46 | GPIO##PORT->CR1 &= (uint8_t)(~(1 << PIN)); \ 47 | GPIO##PORT->CR2 &= (uint8_t)(~(1 << PIN)); \ 48 | } 49 | 50 | #define GPIO_PIN_CONFIGURATION_INPUT_PULL_UP_WITH_ITERRUPT(PORT, PIN, LEVEL, MODE) \ 51 | { \ 52 | GPIO##PORT->DDR &= (uint8_t)(~(1 << PIN)); \ 53 | GPIO##PORT->CR1 |= (1 << PIN); \ 54 | GPIO##PORT->CR2 |= (1 << PIN); \ 55 | } 56 | 57 | #define GPIO_PIN_CONFIGURATION_INPUT_PULL_UP_WITHOUT_ITERRUPT(PORT, PIN, LEVEL, MODE) \ 58 | { \ 59 | GPIO##PORT->DDR &= (uint8_t)(~(1 << PIN)); \ 60 | GPIO##PORT->CR1 |= (1 << PIN); \ 61 | GPIO##PORT->CR2 &= (uint8_t)(~(1 << PIN)); \ 62 | } 63 | 64 | #define GPIO_PIN_CONFIGURATION_INPUT_FLOATING_WITH_ITERRUPT(PORT, PIN, LEVEL, MODE) \ 65 | { \ 66 | GPIO##PORT->DDR &= (uint8_t)(~(1 << PIN)); \ 67 | GPIO##PORT->CR1 &= (uint8_t)(~(1 << PIN)); \ 68 | GPIO##PORT->CR2 |= (1 << PIN); \ 69 | } 70 | 71 | #define GPIO_PIN_CONFIGURATION_INPUT_FLOATING_WITHOUT_ITERRUPT(PORT, PIN, LEVEL, MODE) \ 72 | { \ 73 | GPIO##PORT->DDR &= (uint8_t)(~(1 << PIN)); \ 74 | GPIO##PORT->CR1 &= (uint8_t)(~(1 << PIN)); \ 75 | GPIO##PORT->CR2 &= (uint8_t)(~(1 << PIN)); \ 76 | } 77 | 78 | //------------------------------------------------------------------------------ 79 | #define GPIO_PIN_CONFIGURATION(PORT, PIN, LEVEL, MODE) \ 80 | { \ 81 | GPIO_PIN_CONFIGURATION_##MODE(PORT, PIN, LEVEL, MODE); \ 82 | } 83 | 84 | //------------------------------------------------------------------------------ 85 | #define GPIO_PIN_OFF_HIGH(PORT, PIN, LEVEL, MODE) \ 86 | { GPIO##PORT->ODR &= (uint8_t)((uint8_t)(~(1 << PIN))); } 87 | 88 | #define GPIO_PIN_OFF_LOW(PORT, PIN, LEVEL, MODE) \ 89 | { GPIO##PORT->ODR |= (1 << PIN); } 90 | 91 | #define GPIO_PIN_OFF(PORT, PIN, LEVEL, MODE) \ 92 | { GPIO_PIN_OFF_##LEVEL(PORT, PIN, LEVEL, MODE) } 93 | 94 | //------------------------------------------------------------------------------ 95 | #define GPIO_PIN_ON_HIGH(PORT, PIN, LEVEL, MODE) \ 96 | { GPIO##PORT->ODR |= (1 << PIN); } 97 | 98 | #define GPIO_PIN_ON_LOW(PORT, PIN, LEVEL, MODE) \ 99 | { GPIO##PORT->ODR &= (uint8_t)(~(1 << PIN)); } 100 | 101 | #define GPIO_PIN_ON(PORT, PIN, LEVEL, MODE) \ 102 | { GPIO_PIN_ON_##LEVEL(PORT, PIN, LEVEL, MODE) } 103 | 104 | //------------------------------------------------------------------------------ 105 | #define GPIO_PIN_TOGGLE(PORT, PIN, LEVEL, MODE) \ 106 | { GPIO##PORT->ODR ^= (uint8_t)(1 << PIN); } 107 | 108 | //------------------------------------------------------------------------------ 109 | #define GPIO_PIN_SIGNAL_HIGH(PORT, PIN, LEVEL, MODE) \ 110 | ( (GPIO##PORT->IDR & (1 << PIN)) == (1 << PIN) ) 111 | 112 | #define GPIO_PIN_SIGNAL_LOW(PORT, PIN, LEVEL, MODE) \ 113 | ( (GPIO##PORT->IDR & (1 << PIN)) != (1 << PIN) ) 114 | 115 | #define GPIO_PIN_SIGNAL(PORT, PIN, LEVEL, MODE) \ 116 | ( GPIO_PIN_SIGNAL_##LEVEL(PORT, PIN, LEVEL, MODE) ) 117 | 118 | //------------------------------------------------------------------------------ 119 | #define PIN_CONFIGURATION(PIN_DESCRIPTION) GPIO_PIN_CONFIGURATION(PIN_DESCRIPTION) 120 | #define PIN_ON(PIN_DESCRIPTION) GPIO_PIN_ON(PIN_DESCRIPTION) 121 | #define PIN_OFF(PIN_DESCRIPTION) GPIO_PIN_OFF(PIN_DESCRIPTION) 122 | #define PIN_TOGGLE(PIN_DESCRIPTION) GPIO_PIN_TOGGLE(PIN_DESCRIPTION) 123 | #define PIN_SIGNAL(PIN_DESCRIPTION) GPIO_PIN_SIGNAL(PIN_DESCRIPTION) 124 | 125 | #endif /* MCU_GPIO_H_ */ 126 | -------------------------------------------------------------------------------- /mcu/std_lib/Release_Notes.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZiB/STM8S-USB/1844b1bc4d40433e264c68cd51c8f76a3d349eb6/mcu/std_lib/Release_Notes.html -------------------------------------------------------------------------------- /mcu/std_lib/inc/stm8s_adc2.h: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm8s_adc2.h 4 | * @author MCD Application Team 5 | * @version V2.1.0 6 | * @date 18-November-2011 7 | * @brief This file contains all the prototypes/macros for the ADC2 peripheral. 8 | ****************************************************************************** 9 | * @attention 10 | * 11 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 12 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 13 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 14 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 15 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 16 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 17 | * 18 | *

© COPYRIGHT 2011 STMicroelectronics

19 | ****************************************************************************** 20 | */ 21 | 22 | 23 | /* Define to prevent recursive inclusion -------------------------------------*/ 24 | #ifndef __STM8S_ADC2_H 25 | #define __STM8S_ADC2_H 26 | 27 | /* Includes ------------------------------------------------------------------*/ 28 | #include "stm8s.h" 29 | 30 | /* Exported types ------------------------------------------------------------*/ 31 | 32 | /** @addtogroup ADC2_Exported_Types 33 | * @{ 34 | */ 35 | 36 | /** 37 | * @brief ADC2 clock prescaler selection 38 | */ 39 | 40 | typedef enum { 41 | ADC2_PRESSEL_FCPU_D2 = (uint8_t)0x00, /**< Prescaler selection fADC2 = fcpu/2 */ 42 | ADC2_PRESSEL_FCPU_D3 = (uint8_t)0x10, /**< Prescaler selection fADC2 = fcpu/3 */ 43 | ADC2_PRESSEL_FCPU_D4 = (uint8_t)0x20, /**< Prescaler selection fADC2 = fcpu/4 */ 44 | ADC2_PRESSEL_FCPU_D6 = (uint8_t)0x30, /**< Prescaler selection fADC2 = fcpu/6 */ 45 | ADC2_PRESSEL_FCPU_D8 = (uint8_t)0x40, /**< Prescaler selection fADC2 = fcpu/8 */ 46 | ADC2_PRESSEL_FCPU_D10 = (uint8_t)0x50, /**< Prescaler selection fADC2 = fcpu/10 */ 47 | ADC2_PRESSEL_FCPU_D12 = (uint8_t)0x60, /**< Prescaler selection fADC2 = fcpu/12 */ 48 | ADC2_PRESSEL_FCPU_D18 = (uint8_t)0x70 /**< Prescaler selection fADC2 = fcpu/18 */ 49 | } ADC2_PresSel_TypeDef; 50 | 51 | /** 52 | * @brief ADC2 External conversion trigger event selection 53 | */ 54 | typedef enum { 55 | ADC2_EXTTRIG_TIM = (uint8_t)0x00, /**< Conversion from Internal TIM TRGO event */ 56 | ADC2_EXTTRIG_GPIO = (uint8_t)0x01 /**< Conversion from External interrupt on ADC_ETR pin*/ 57 | } ADC2_ExtTrig_TypeDef; 58 | 59 | /** 60 | * @brief ADC2 data alignment 61 | */ 62 | typedef enum { 63 | ADC2_ALIGN_LEFT = (uint8_t)0x00, /**< Data alignment left */ 64 | ADC2_ALIGN_RIGHT = (uint8_t)0x08 /**< Data alignment right */ 65 | } ADC2_Align_TypeDef; 66 | 67 | /** 68 | * @brief ADC2 schmitt Trigger 69 | */ 70 | typedef enum { 71 | ADC2_SCHMITTTRIG_CHANNEL0 = (uint8_t)0x00, /**< Schmitt trigger disable on AIN0 */ 72 | ADC2_SCHMITTTRIG_CHANNEL1 = (uint8_t)0x01, /**< Schmitt trigger disable on AIN1 */ 73 | ADC2_SCHMITTTRIG_CHANNEL2 = (uint8_t)0x02, /**< Schmitt trigger disable on AIN2 */ 74 | ADC2_SCHMITTTRIG_CHANNEL3 = (uint8_t)0x03, /**< Schmitt trigger disable on AIN3 */ 75 | ADC2_SCHMITTTRIG_CHANNEL4 = (uint8_t)0x04, /**< Schmitt trigger disable on AIN4 */ 76 | ADC2_SCHMITTTRIG_CHANNEL5 = (uint8_t)0x05, /**< Schmitt trigger disable on AIN5 */ 77 | ADC2_SCHMITTTRIG_CHANNEL6 = (uint8_t)0x06, /**< Schmitt trigger disable on AIN6 */ 78 | ADC2_SCHMITTTRIG_CHANNEL7 = (uint8_t)0x07, /**< Schmitt trigger disable on AIN7 */ 79 | ADC2_SCHMITTTRIG_CHANNEL8 = (uint8_t)0x08, /**< Schmitt trigger disable on AIN8 */ 80 | ADC2_SCHMITTTRIG_CHANNEL9 = (uint8_t)0x09, /**< Schmitt trigger disable on AIN9 */ 81 | ADC2_SCHMITTTRIG_CHANNEL10 = (uint8_t)0x0A, /**< Schmitt trigger disable on AIN10 */ 82 | ADC2_SCHMITTTRIG_CHANNEL11 = (uint8_t)0x0B, /**< Schmitt trigger disable on AIN11 */ 83 | ADC2_SCHMITTTRIG_CHANNEL12 = (uint8_t)0x0C, /**< Schmitt trigger disable on AIN12 */ 84 | ADC2_SCHMITTTRIG_CHANNEL13 = (uint8_t)0x0D, /**< Schmitt trigger disable on AIN13 */ 85 | ADC2_SCHMITTTRIG_CHANNEL14 = (uint8_t)0x0E, /**< Schmitt trigger disable on AIN14 */ 86 | ADC2_SCHMITTTRIG_CHANNEL15 = (uint8_t)0x0F, /**< Schmitt trigger disable on AIN15 */ 87 | ADC2_SCHMITTTRIG_ALL = (uint8_t)0x1F /**< Schmitt trigger disable on all channels */ 88 | 89 | } ADC2_SchmittTrigg_TypeDef; 90 | 91 | /** 92 | * @brief ADC2 conversion mode selection 93 | */ 94 | 95 | typedef enum { 96 | ADC2_CONVERSIONMODE_SINGLE = (uint8_t)0x00, /**< Single conversion mode */ 97 | ADC2_CONVERSIONMODE_CONTINUOUS = (uint8_t)0x01 /**< Continuous conversion mode */ 98 | } ADC2_ConvMode_TypeDef; 99 | 100 | /** 101 | * @brief ADC2 analog channel selection 102 | */ 103 | 104 | typedef enum { 105 | ADC2_CHANNEL_0 = (uint8_t)0x00, /**< Analog channel 0 */ 106 | ADC2_CHANNEL_1 = (uint8_t)0x01, /**< Analog channel 1 */ 107 | ADC2_CHANNEL_2 = (uint8_t)0x02, /**< Analog channel 2 */ 108 | ADC2_CHANNEL_3 = (uint8_t)0x03, /**< Analog channel 3 */ 109 | ADC2_CHANNEL_4 = (uint8_t)0x04, /**< Analog channel 4 */ 110 | ADC2_CHANNEL_5 = (uint8_t)0x05, /**< Analog channel 5 */ 111 | ADC2_CHANNEL_6 = (uint8_t)0x06, /**< Analog channel 6 */ 112 | ADC2_CHANNEL_7 = (uint8_t)0x07, /**< Analog channel 7 */ 113 | ADC2_CHANNEL_8 = (uint8_t)0x08, /**< Analog channel 8 */ 114 | ADC2_CHANNEL_9 = (uint8_t)0x09, /**< Analog channel 9 */ 115 | ADC2_CHANNEL_10 = (uint8_t)0x0A, /**< Analog channel 10 */ 116 | ADC2_CHANNEL_11 = (uint8_t)0x0B, /**< Analog channel 11 */ 117 | ADC2_CHANNEL_12 = (uint8_t)0x0C, /**< Analog channel 12 */ 118 | ADC2_CHANNEL_13 = (uint8_t)0x0D, /**< Analog channel 13 */ 119 | ADC2_CHANNEL_14 = (uint8_t)0x0E, /**< Analog channel 14 */ 120 | ADC2_CHANNEL_15 = (uint8_t)0x0F /**< Analog channel 15 */ 121 | } ADC2_Channel_TypeDef; 122 | 123 | /** 124 | * @} 125 | */ 126 | 127 | /* Exported constants --------------------------------------------------------*/ 128 | 129 | /* Exported macros ------------------------------------------------------------*/ 130 | 131 | /* Private macros ------------------------------------------------------------*/ 132 | 133 | /** @addtogroup ADC2_Private_Macros 134 | * @brief Macros used by the assert function to check the different functions parameters. 135 | * @{ 136 | */ 137 | 138 | /** 139 | * @brief Macro used by the assert function to check the different prescaler's values. 140 | */ 141 | #define IS_ADC2_PRESSEL_OK(PRESCALER) (((PRESCALER) == ADC2_PRESSEL_FCPU_D2) || \ 142 | ((PRESCALER) == ADC2_PRESSEL_FCPU_D3) || \ 143 | ((PRESCALER) == ADC2_PRESSEL_FCPU_D4) || \ 144 | ((PRESCALER) == ADC2_PRESSEL_FCPU_D6) || \ 145 | ((PRESCALER) == ADC2_PRESSEL_FCPU_D8) || \ 146 | ((PRESCALER) == ADC2_PRESSEL_FCPU_D10) || \ 147 | ((PRESCALER) == ADC2_PRESSEL_FCPU_D12) || \ 148 | ((PRESCALER) == ADC2_PRESSEL_FCPU_D18)) 149 | 150 | /** 151 | * @brief Macro used by the assert function to check the different external trigger values. 152 | */ 153 | #define IS_ADC2_EXTTRIG_OK(EXTRIG) (((EXTRIG) == ADC2_EXTTRIG_TIM) || \ 154 | ((EXTRIG) == ADC2_EXTTRIG_GPIO)) 155 | 156 | /** 157 | * @brief Macro used by the assert function to check the different alignement modes. 158 | */ 159 | #define IS_ADC2_ALIGN_OK(ALIGN) (((ALIGN) == ADC2_ALIGN_LEFT) || \ 160 | ((ALIGN) == ADC2_ALIGN_RIGHT)) 161 | 162 | 163 | /** 164 | * @brief Macro used by the assert function to check the different schmitt trigger values. 165 | */ 166 | #define IS_ADC2_SCHMITTTRIG_OK(SCHMITTTRIG) (((SCHMITTTRIG) == ADC2_SCHMITTTRIG_CHANNEL0) || \ 167 | ((SCHMITTTRIG) == ADC2_SCHMITTTRIG_CHANNEL1) || \ 168 | ((SCHMITTTRIG) == ADC2_SCHMITTTRIG_CHANNEL2) || \ 169 | ((SCHMITTTRIG) == ADC2_SCHMITTTRIG_CHANNEL3) || \ 170 | ((SCHMITTTRIG) == ADC2_SCHMITTTRIG_CHANNEL4) || \ 171 | ((SCHMITTTRIG) == ADC2_SCHMITTTRIG_CHANNEL5) || \ 172 | ((SCHMITTTRIG) == ADC2_SCHMITTTRIG_CHANNEL6) || \ 173 | ((SCHMITTTRIG) == ADC2_SCHMITTTRIG_CHANNEL7) || \ 174 | ((SCHMITTTRIG) == ADC2_SCHMITTTRIG_CHANNEL8) || \ 175 | ((SCHMITTTRIG) == ADC2_SCHMITTTRIG_CHANNEL9) || \ 176 | ((SCHMITTTRIG) == ADC2_SCHMITTTRIG_CHANNEL10) || \ 177 | ((SCHMITTTRIG) == ADC2_SCHMITTTRIG_CHANNEL11) || \ 178 | ((SCHMITTTRIG) == ADC2_SCHMITTTRIG_CHANNEL12) || \ 179 | ((SCHMITTTRIG) == ADC2_SCHMITTTRIG_CHANNEL13) || \ 180 | ((SCHMITTTRIG) == ADC2_SCHMITTTRIG_CHANNEL14) || \ 181 | ((SCHMITTTRIG) == ADC2_SCHMITTTRIG_CHANNEL15) || \ 182 | ((SCHMITTTRIG) == ADC2_SCHMITTTRIG_ALL)) 183 | 184 | /** 185 | * @brief Macro used by the assert function to check the different conversion modes. 186 | */ 187 | #define IS_ADC2_CONVERSIONMODE_OK(MODE) (((MODE) == ADC2_CONVERSIONMODE_SINGLE) || \ 188 | ((MODE) == ADC2_CONVERSIONMODE_CONTINUOUS)) 189 | 190 | /** 191 | * @brief Macro used by the assert function to check the different channels values. 192 | */ 193 | #define IS_ADC2_CHANNEL_OK(CHANNEL) (((CHANNEL) == ADC2_CHANNEL_0) || \ 194 | ((CHANNEL) == ADC2_CHANNEL_1) || \ 195 | ((CHANNEL) == ADC2_CHANNEL_2) || \ 196 | ((CHANNEL) == ADC2_CHANNEL_3) || \ 197 | ((CHANNEL) == ADC2_CHANNEL_4) || \ 198 | ((CHANNEL) == ADC2_CHANNEL_5) || \ 199 | ((CHANNEL) == ADC2_CHANNEL_6) || \ 200 | ((CHANNEL) == ADC2_CHANNEL_7) || \ 201 | ((CHANNEL) == ADC2_CHANNEL_8) || \ 202 | ((CHANNEL) == ADC2_CHANNEL_9) || \ 203 | ((CHANNEL) == ADC2_CHANNEL_10) || \ 204 | ((CHANNEL) == ADC2_CHANNEL_11) || \ 205 | ((CHANNEL) == ADC2_CHANNEL_12) || \ 206 | ((CHANNEL) == ADC2_CHANNEL_13) || \ 207 | ((CHANNEL) == ADC2_CHANNEL_14) || \ 208 | ((CHANNEL) == ADC2_CHANNEL_15)) 209 | 210 | /** 211 | * @} 212 | */ 213 | 214 | /* Exported functions ------------------------------------------------------- */ 215 | 216 | /** @addtogroup ADC2_Exported_Functions 217 | * @{ 218 | */ 219 | void ADC2_DeInit(void); 220 | void ADC2_Init(ADC2_ConvMode_TypeDef ADC2_ConversionMode, 221 | ADC2_Channel_TypeDef ADC2_Channel, 222 | ADC2_PresSel_TypeDef ADC2_PrescalerSelection, 223 | ADC2_ExtTrig_TypeDef ADC2_ExtTrigger, 224 | FunctionalState ADC2_ExtTriggerState, 225 | ADC2_Align_TypeDef ADC2_Align, 226 | ADC2_SchmittTrigg_TypeDef ADC2_SchmittTriggerChannel, 227 | FunctionalState ADC2_SchmittTriggerState); 228 | void ADC2_Cmd(FunctionalState NewState); 229 | void ADC2_ITConfig(FunctionalState NewState); 230 | void ADC2_PrescalerConfig(ADC2_PresSel_TypeDef ADC2_Prescaler); 231 | void ADC2_SchmittTriggerConfig(ADC2_SchmittTrigg_TypeDef ADC2_SchmittTriggerChannel, 232 | FunctionalState NewState); 233 | void ADC2_ConversionConfig(ADC2_ConvMode_TypeDef ADC2_ConversionMode, 234 | ADC2_Channel_TypeDef ADC2_Channel, 235 | ADC2_Align_TypeDef ADC2_Align); 236 | void ADC2_ExternalTriggerConfig(ADC2_ExtTrig_TypeDef ADC2_ExtTrigger, FunctionalState NewState); 237 | void ADC2_StartConversion(void); 238 | uint16_t ADC2_GetConversionValue(void); 239 | FlagStatus ADC2_GetFlagStatus(void); 240 | void ADC2_ClearFlag(void); 241 | ITStatus ADC2_GetITStatus(void); 242 | void ADC2_ClearITPendingBit(void); 243 | /** 244 | * @} 245 | */ 246 | 247 | #endif /* __STM8S_ADC2_H */ 248 | 249 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 250 | -------------------------------------------------------------------------------- /mcu/std_lib/inc/stm8s_awu.h: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm8s_awu.h 4 | * @author MCD Application Team 5 | * @version V2.1.0 6 | * @date 18-November-2011 7 | * @brief This file contains all functions prototype and macros for the AWU peripheral. 8 | ****************************************************************************** 9 | * @attention 10 | * 11 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 12 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 13 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 14 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 15 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 16 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 17 | * 18 | *

© COPYRIGHT 2011 STMicroelectronics

19 | ****************************************************************************** 20 | */ 21 | 22 | /* Define to prevent recursive inclusion -------------------------------------*/ 23 | #ifndef __STM8S_AWU_H 24 | #define __STM8S_AWU_H 25 | 26 | /* Includes ------------------------------------------------------------------*/ 27 | #include "stm8s.h" 28 | 29 | /* Exported types ------------------------------------------------------------*/ 30 | 31 | /** @addtogroup AWU_Exported_Types 32 | * @{ 33 | */ 34 | 35 | /** 36 | * @brief AWU TimeBase selection 37 | */ 38 | 39 | typedef enum 40 | { 41 | AWU_TIMEBASE_NO_IT = (uint8_t)0, /*!< No AWU interrupt selected */ 42 | AWU_TIMEBASE_250US = (uint8_t)1, /*!< AWU Timebase equals 0.25 ms */ 43 | AWU_TIMEBASE_500US = (uint8_t)2, /*!< AWU Timebase equals 0.5 ms */ 44 | AWU_TIMEBASE_1MS = (uint8_t)3, /*!< AWU Timebase equals 1 ms */ 45 | AWU_TIMEBASE_2MS = (uint8_t)4, /*!< AWU Timebase equals 2 ms */ 46 | AWU_TIMEBASE_4MS = (uint8_t)5, /*!< AWU Timebase equals 4 ms */ 47 | AWU_TIMEBASE_8MS = (uint8_t)6, /*!< AWU Timebase equals 8 ms */ 48 | AWU_TIMEBASE_16MS = (uint8_t)7, /*!< AWU Timebase equals 16 ms */ 49 | AWU_TIMEBASE_32MS = (uint8_t)8, /*!< AWU Timebase equals 32 ms */ 50 | AWU_TIMEBASE_64MS = (uint8_t)9, /*!< AWU Timebase equals 64 ms */ 51 | AWU_TIMEBASE_128MS = (uint8_t)10, /*!< AWU Timebase equals 128 ms */ 52 | AWU_TIMEBASE_256MS = (uint8_t)11, /*!< AWU Timebase equals 256 ms */ 53 | AWU_TIMEBASE_512MS = (uint8_t)12, /*!< AWU Timebase equals 512 ms */ 54 | AWU_TIMEBASE_1S = (uint8_t)13, /*!< AWU Timebase equals 1 s */ 55 | AWU_TIMEBASE_2S = (uint8_t)14, /*!< AWU Timebase equals 2 s */ 56 | AWU_TIMEBASE_12S = (uint8_t)15, /*!< AWU Timebase equals 12 s */ 57 | AWU_TIMEBASE_30S = (uint8_t)16 /*!< AWU Timebase equals 30 s */ 58 | } AWU_Timebase_TypeDef; 59 | 60 | /** 61 | * @} 62 | */ 63 | 64 | /* Exported constants --------------------------------------------------------*/ 65 | 66 | /** @addtogroup AWU_Exported_Constants 67 | * @{ 68 | */ 69 | 70 | #define LSI_FREQUENCY_MIN ((uint32_t)110000) /*!< LSI minimum value in Hertz */ 71 | #define LSI_FREQUENCY_MAX ((uint32_t)150000) /*!< LSI maximum value in Hertz */ 72 | 73 | /** 74 | * @} 75 | */ 76 | 77 | /* Exported macros ------------------------------------------------------------*/ 78 | 79 | /* Private macros ------------------------------------------------------------*/ 80 | 81 | /** @addtogroup AWU_Private_Macros 82 | * @{ 83 | */ 84 | 85 | /** 86 | * @brief Macro used by the assert function to check the different functions parameters. 87 | */ 88 | 89 | /** 90 | * @brief Macro used by the assert function to check the AWU timebases 91 | */ 92 | #define IS_AWU_TIMEBASE_OK(TB) \ 93 | (((TB) == AWU_TIMEBASE_NO_IT) || \ 94 | ((TB) == AWU_TIMEBASE_250US) || \ 95 | ((TB) == AWU_TIMEBASE_500US) || \ 96 | ((TB) == AWU_TIMEBASE_1MS) || \ 97 | ((TB) == AWU_TIMEBASE_2MS) || \ 98 | ((TB) == AWU_TIMEBASE_4MS) || \ 99 | ((TB) == AWU_TIMEBASE_8MS) || \ 100 | ((TB) == AWU_TIMEBASE_16MS) || \ 101 | ((TB) == AWU_TIMEBASE_32MS) || \ 102 | ((TB) == AWU_TIMEBASE_64MS) || \ 103 | ((TB) == AWU_TIMEBASE_128MS) || \ 104 | ((TB) == AWU_TIMEBASE_256MS) || \ 105 | ((TB) == AWU_TIMEBASE_512MS) || \ 106 | ((TB) == AWU_TIMEBASE_1S) || \ 107 | ((TB) == AWU_TIMEBASE_2S) || \ 108 | ((TB) == AWU_TIMEBASE_12S) || \ 109 | ((TB) == AWU_TIMEBASE_30S)) 110 | 111 | /** 112 | * @brief Macro used by the assert function to check the LSI frequency (in Hz) 113 | */ 114 | #define IS_LSI_FREQUENCY_OK(FREQ) \ 115 | (((FREQ) >= LSI_FREQUENCY_MIN) && \ 116 | ((FREQ) <= LSI_FREQUENCY_MAX)) 117 | 118 | /** 119 | * @} 120 | */ 121 | 122 | /* Exported functions ------------------------------------------------------- */ 123 | 124 | /** @addtogroup AWU_Exported_Functions 125 | * @{ 126 | */ 127 | void AWU_DeInit(void); 128 | void AWU_Init(AWU_Timebase_TypeDef AWU_TimeBase); 129 | void AWU_Cmd(FunctionalState NewState); 130 | void AWU_LSICalibrationConfig(uint32_t LSIFreqHz); 131 | void AWU_IdleModeEnable(void); 132 | FlagStatus AWU_GetFlagStatus(void); 133 | 134 | /** 135 | * @} 136 | */ 137 | 138 | #endif /* __STM8S_AWU_H */ 139 | 140 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 141 | -------------------------------------------------------------------------------- /mcu/std_lib/inc/stm8s_beep.h: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm8s_beep.h 4 | * @author MCD Application Team 5 | * @version V2.1.0 6 | * @date 18-November-2011 7 | * @brief This file contains all functions prototype and macros for the BEEP peripheral. 8 | ****************************************************************************** 9 | * @attention 10 | * 11 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 12 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 13 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 14 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 15 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 16 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 17 | * 18 | *

© COPYRIGHT 2011 STMicroelectronics

19 | ****************************************************************************** 20 | */ 21 | 22 | 23 | /* Define to prevent recursive inclusion -------------------------------------*/ 24 | #ifndef __STM8S_BEEP_H 25 | #define __STM8S_BEEP_H 26 | 27 | /* Includes ------------------------------------------------------------------*/ 28 | #include "stm8s.h" 29 | 30 | /* Exported types ------------------------------------------------------------*/ 31 | 32 | /** @addtogroup BEEP_Exported_Types 33 | * @{ 34 | */ 35 | 36 | /** 37 | * @brief BEEP Frequency selection 38 | */ 39 | typedef enum { 40 | BEEP_FREQUENCY_1KHZ = (uint8_t)0x00, /*!< Beep signal output frequency equals to 1 KHz */ 41 | BEEP_FREQUENCY_2KHZ = (uint8_t)0x40, /*!< Beep signal output frequency equals to 2 KHz */ 42 | BEEP_FREQUENCY_4KHZ = (uint8_t)0x80 /*!< Beep signal output frequency equals to 4 KHz */ 43 | } BEEP_Frequency_TypeDef; 44 | 45 | /** 46 | * @} 47 | */ 48 | 49 | /* Exported constants --------------------------------------------------------*/ 50 | 51 | /** @addtogroup BEEP_Exported_Constants 52 | * @{ 53 | */ 54 | 55 | #define BEEP_CALIBRATION_DEFAULT ((uint8_t)0x0B) /*!< Default value when calibration is not done */ 56 | 57 | #define LSI_FREQUENCY_MIN ((uint32_t)110000) /*!< LSI minimum value in Hertz */ 58 | #define LSI_FREQUENCY_MAX ((uint32_t)150000) /*!< LSI maximum value in Hertz */ 59 | 60 | /** 61 | * @} 62 | */ 63 | 64 | /* Exported macros -----------------------------------------------------------*/ 65 | /* Private macros ------------------------------------------------------------*/ 66 | 67 | /** @addtogroup BEEP_Private_Macros 68 | * @{ 69 | */ 70 | 71 | /** 72 | * @brief Macro used by the assert function to check the different functions parameters. 73 | */ 74 | 75 | /** 76 | * @brief Macro used by the assert function to check the BEEP frequencies. 77 | */ 78 | #define IS_BEEP_FREQUENCY_OK(FREQ) \ 79 | (((FREQ) == BEEP_FREQUENCY_1KHZ) || \ 80 | ((FREQ) == BEEP_FREQUENCY_2KHZ) || \ 81 | ((FREQ) == BEEP_FREQUENCY_4KHZ)) 82 | 83 | /** 84 | * @brief Macro used by the assert function to check the LSI frequency (in Hz). 85 | */ 86 | #define IS_LSI_FREQUENCY_OK(FREQ) \ 87 | (((FREQ) >= LSI_FREQUENCY_MIN) && \ 88 | ((FREQ) <= LSI_FREQUENCY_MAX)) 89 | 90 | /** 91 | * @} 92 | */ 93 | 94 | /* Exported functions ------------------------------------------------------- */ 95 | 96 | /** @addtogroup BEEP_Exported_Functions 97 | * @{ 98 | */ 99 | 100 | void BEEP_DeInit(void); 101 | void BEEP_Init(BEEP_Frequency_TypeDef BEEP_Frequency); 102 | void BEEP_Cmd(FunctionalState NewState); 103 | void BEEP_LSICalibrationConfig(uint32_t LSIFreqHz); 104 | 105 | 106 | /** 107 | * @} 108 | */ 109 | 110 | #endif /* __STM8S_BEEP_H */ 111 | 112 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 113 | -------------------------------------------------------------------------------- /mcu/std_lib/inc/stm8s_exti.h: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm8s_exti.h 4 | * @author MCD Application Team 5 | * @version V2.1.0 6 | * @date 18-November-2011 7 | * @brief This file contains all functions prototype and macros for the EXTI peripheral. 8 | ****************************************************************************** 9 | * @attention 10 | * 11 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 12 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 13 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 14 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 15 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 16 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 17 | * 18 | *

© COPYRIGHT 2011 STMicroelectronics

19 | ****************************************************************************** 20 | */ 21 | 22 | /* Define to prevent recursive inclusion -------------------------------------*/ 23 | #ifndef __STM8S_EXTI_H__ 24 | #define __STM8S_EXTI_H__ 25 | 26 | /* Includes ------------------------------------------------------------------*/ 27 | #include "stm8s.h" 28 | 29 | /* Exported types ------------------------------------------------------------*/ 30 | 31 | /** @addtogroup EXTI_Exported_Types 32 | * @{ 33 | */ 34 | 35 | /** 36 | * @brief EXTI Sensitivity values for PORTA to PORTE 37 | */ 38 | typedef enum { 39 | EXTI_SENSITIVITY_FALL_LOW = (uint8_t)0x00, /*!< Interrupt on Falling edge and Low level */ 40 | EXTI_SENSITIVITY_RISE_ONLY = (uint8_t)0x01, /*!< Interrupt on Rising edge only */ 41 | EXTI_SENSITIVITY_FALL_ONLY = (uint8_t)0x02, /*!< Interrupt on Falling edge only */ 42 | EXTI_SENSITIVITY_RISE_FALL = (uint8_t)0x03 /*!< Interrupt on Rising and Falling edges */ 43 | } EXTI_Sensitivity_TypeDef; 44 | 45 | /** 46 | * @brief EXTI Sensitivity values for TLI 47 | */ 48 | typedef enum { 49 | EXTI_TLISENSITIVITY_FALL_ONLY = (uint8_t)0x00, /*!< Top Level Interrupt on Falling edge only */ 50 | EXTI_TLISENSITIVITY_RISE_ONLY = (uint8_t)0x04 /*!< Top Level Interrupt on Rising edge only */ 51 | } EXTI_TLISensitivity_TypeDef; 52 | 53 | /** 54 | * @brief EXTI PortNum possible values 55 | */ 56 | typedef enum { 57 | EXTI_PORT_GPIOA = (uint8_t)0x00, /*!< GPIO Port A */ 58 | EXTI_PORT_GPIOB = (uint8_t)0x01, /*!< GPIO Port B */ 59 | EXTI_PORT_GPIOC = (uint8_t)0x02, /*!< GPIO Port C */ 60 | EXTI_PORT_GPIOD = (uint8_t)0x03, /*!< GPIO Port D */ 61 | EXTI_PORT_GPIOE = (uint8_t)0x04 /*!< GPIO Port E */ 62 | } EXTI_Port_TypeDef; 63 | 64 | /** 65 | * @} 66 | */ 67 | 68 | /* Private macros ------------------------------------------------------------*/ 69 | 70 | /** @addtogroup EXTI_Private_Macros 71 | * @{ 72 | */ 73 | 74 | /** 75 | * @brief Macro used by the assert function in order to check the different sensitivity values for PORTA to PORTE. 76 | */ 77 | #define IS_EXTI_SENSITIVITY_OK(SensitivityValue) \ 78 | (((SensitivityValue) == EXTI_SENSITIVITY_FALL_LOW) || \ 79 | ((SensitivityValue) == EXTI_SENSITIVITY_RISE_ONLY) || \ 80 | ((SensitivityValue) == EXTI_SENSITIVITY_FALL_ONLY) || \ 81 | ((SensitivityValue) == EXTI_SENSITIVITY_RISE_FALL)) 82 | 83 | /** 84 | * @brief Macro used by the assert function in order to check the different sensitivity values for TLI. 85 | */ 86 | #define IS_EXTI_TLISENSITIVITY_OK(SensitivityValue) \ 87 | (((SensitivityValue) == EXTI_TLISENSITIVITY_FALL_ONLY) || \ 88 | ((SensitivityValue) == EXTI_TLISENSITIVITY_RISE_ONLY)) 89 | 90 | /** 91 | * @brief Macro used by the assert function in order to check the different Port values 92 | */ 93 | #define IS_EXTI_PORT_OK(PORT) \ 94 | (((PORT) == EXTI_PORT_GPIOA) ||\ 95 | ((PORT) == EXTI_PORT_GPIOB) ||\ 96 | ((PORT) == EXTI_PORT_GPIOC) ||\ 97 | ((PORT) == EXTI_PORT_GPIOD) ||\ 98 | ((PORT) == EXTI_PORT_GPIOE)) 99 | 100 | /** 101 | * @brief Macro used by the assert function in order to check the different values of the EXTI PinMask 102 | */ 103 | #define IS_EXTI_PINMASK_OK(PinMask) ((((PinMask) & (uint8_t)0x00) == (uint8_t)0x00) && ((PinMask) != (uint8_t)0x00)) 104 | 105 | /** 106 | * @} 107 | */ 108 | 109 | /* Exported functions ------------------------------------------------------- */ 110 | 111 | /** @addtogroup EXTI_Exported_Functions 112 | * @{ 113 | */ 114 | 115 | void EXTI_DeInit(void); 116 | void EXTI_SetExtIntSensitivity(EXTI_Port_TypeDef Port, EXTI_Sensitivity_TypeDef SensitivityValue); 117 | void EXTI_SetTLISensitivity(EXTI_TLISensitivity_TypeDef SensitivityValue); 118 | EXTI_Sensitivity_TypeDef EXTI_GetExtIntSensitivity(EXTI_Port_TypeDef Port); 119 | EXTI_TLISensitivity_TypeDef EXTI_GetTLISensitivity(void); 120 | 121 | /** 122 | * @} 123 | */ 124 | 125 | #endif /* __STM8S_EXTI_H__ */ 126 | 127 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 128 | -------------------------------------------------------------------------------- /mcu/std_lib/inc/stm8s_flash.h: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm8s_flash.h 4 | * @author MCD Application Team 5 | * @version V2.1.0 6 | * @date 18-November-2011 7 | * @brief This file contains all functions prototype and macros for the FLASH peripheral. 8 | ****************************************************************************** 9 | * @attention 10 | * 11 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 12 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 13 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 14 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 15 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 16 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 17 | * 18 | *

© COPYRIGHT 2011 STMicroelectronics

19 | ****************************************************************************** 20 | */ 21 | 22 | /* Define to prevent recursive inclusion -------------------------------------*/ 23 | #ifndef __STM8S_FLASH_H 24 | #define __STM8S_FLASH_H 25 | 26 | /* Includes ------------------------------------------------------------------*/ 27 | #include "stm8s.h" 28 | 29 | /* Exported constants --------------------------------------------------------*/ 30 | 31 | /** @addtogroup FLASH_Exported_Constants 32 | * @{ 33 | */ 34 | 35 | #define FLASH_PROG_START_PHYSICAL_ADDRESS ((uint32_t)0x008000) /*!< Program memory: start address */ 36 | 37 | #if defined (STM8S208) || defined(STM8S207) || defined(STM8S007) || defined (STM8AF52Ax) || defined (STM8AF62Ax) 38 | #define FLASH_PROG_END_PHYSICAL_ADDRESS ((uint32_t)0x027FFF) /*!< Program memory: end address */ 39 | #define FLASH_PROG_BLOCKS_NUMBER ((uint16_t)1024) /*!< Program memory: total number of blocks */ 40 | #define FLASH_DATA_START_PHYSICAL_ADDRESS ((uint32_t)0x004000) /*!< Data EEPROM memory: start address */ 41 | #define FLASH_DATA_END_PHYSICAL_ADDRESS ((uint32_t)0x0047FF) /*!< Data EEPROM memory: end address */ 42 | #define FLASH_DATA_BLOCKS_NUMBER ((uint16_t)16) /*!< Data EEPROM memory: total number of blocks */ 43 | #define FLASH_BLOCK_SIZE ((uint8_t)128) /*!< Number of bytes in a block (common for Program and Data memories) */ 44 | #endif /* STM8S208, STM8S207, STM8S007, STM8AF52Ax, STM8AF62Ax */ 45 | 46 | #if defined(STM8S105) || defined(STM8S005) || defined(STM8AF626x) 47 | #define FLASH_PROG_END_PHYSICAL_ADDRESS ((uint32_t)0xFFFF) /*!< Program memory: end address */ 48 | #define FLASH_PROG_BLOCKS_NUMBER ((uint16_t)256) /*!< Program memory: total number of blocks */ 49 | #define FLASH_DATA_START_PHYSICAL_ADDRESS ((uint32_t)0x004000) /*!< Data EEPROM memory: start address */ 50 | #define FLASH_DATA_END_PHYSICAL_ADDRESS ((uint32_t)0x0043FF) /*!< Data EEPROM memory: end address */ 51 | #define FLASH_DATA_BLOCKS_NUMBER ((uint16_t)8) /*!< Data EEPROM memory: total number of blocks */ 52 | #define FLASH_BLOCK_SIZE ((uint8_t)128) /*!< Number of bytes in a block (common for Program and Data memories) */ 53 | #endif /* STM8S105 or STM8AF626x */ 54 | 55 | #if defined(STM8S103) || defined(STM8S003) || defined(STM8S903) 56 | #define FLASH_PROG_END_PHYSICAL_ADDRESS ((uint32_t)0x9FFF) /*!< Program memory: end address */ 57 | #define FLASH_PROG_BLOCKS_NUMBER ((uint16_t)128) /*!< Program memory: total number of blocks */ 58 | #define FLASH_DATA_START_PHYSICAL_ADDRESS ((uint32_t)0x004000) /*!< Data EEPROM memory: start address */ 59 | #define FLASH_DATA_END_PHYSICAL_ADDRESS ((uint32_t)0x00427F) /*!< Data EEPROM memory: end address */ 60 | #define FLASH_DATA_BLOCKS_NUMBER ((uint16_t)10) /*!< Data EEPROM memory: total number of blocks */ 61 | #define FLASH_BLOCK_SIZE ((uint8_t)64) /*!< Number of bytes in a block (common for Program and Data memories) */ 62 | #endif /* STM8S103, STM8S903 */ 63 | 64 | #define FLASH_RASS_KEY1 ((uint8_t)0x56) /*!< First RASS key */ 65 | #define FLASH_RASS_KEY2 ((uint8_t)0xAE) /*!< Second RASS key */ 66 | 67 | #define OPTION_BYTE_START_PHYSICAL_ADDRESS ((uint16_t)0x4800) 68 | #define OPTION_BYTE_END_PHYSICAL_ADDRESS ((uint16_t)0x487F) 69 | #define FLASH_OPTIONBYTE_ERROR ((uint16_t)0x5555) /*!< Error code option byte 70 | (if value read is not equal to complement value read) */ 71 | /** 72 | * @} 73 | */ 74 | 75 | /* Exported types ------------------------------------------------------------*/ 76 | 77 | /** @addtogroup FLASH_Exported_Types 78 | * @{ 79 | */ 80 | 81 | /** 82 | * @brief FLASH Memory types 83 | */ 84 | typedef enum { 85 | FLASH_MEMTYPE_PROG = (uint8_t)0xFD, /*!< Program memory */ 86 | FLASH_MEMTYPE_DATA = (uint8_t)0xF7 /*!< Data EEPROM memory */ 87 | } FLASH_MemType_TypeDef; 88 | 89 | /** 90 | * @brief FLASH programming modes 91 | */ 92 | typedef enum { 93 | FLASH_PROGRAMMODE_STANDARD = (uint8_t)0x00, /*!< Standard programming mode */ 94 | FLASH_PROGRAMMODE_FAST = (uint8_t)0x10 /*!< Fast programming mode */ 95 | } FLASH_ProgramMode_TypeDef; 96 | 97 | /** 98 | * @brief FLASH fixed programming time 99 | */ 100 | typedef enum { 101 | FLASH_PROGRAMTIME_STANDARD = (uint8_t)0x00, /*!< Standard programming time fixed at 1/2 tprog */ 102 | FLASH_PROGRAMTIME_TPROG = (uint8_t)0x01 /*!< Programming time fixed at tprog */ 103 | } FLASH_ProgramTime_TypeDef; 104 | 105 | /** 106 | * @brief FLASH Low Power mode select 107 | */ 108 | typedef enum { 109 | FLASH_LPMODE_POWERDOWN = (uint8_t)0x04, /*!< HALT: Power-Down / ACTIVE-HALT: Power-Down */ 110 | FLASH_LPMODE_STANDBY = (uint8_t)0x08, /*!< HALT: Standby / ACTIVE-HALT: Standby */ 111 | FLASH_LPMODE_POWERDOWN_STANDBY = (uint8_t)0x00, /*!< HALT: Power-Down / ACTIVE-HALT: Standby */ 112 | FLASH_LPMODE_STANDBY_POWERDOWN = (uint8_t)0x0C /*!< HALT: Standby / ACTIVE-HALT: Power-Down */ 113 | } 114 | FLASH_LPMode_TypeDef; 115 | 116 | /** 117 | * @brief FLASH status of the last operation 118 | */ 119 | typedef enum { 120 | #if defined (STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8S105) || \ 121 | defined(STM8S005) || defined (STM8AF52Ax) || defined (STM8AF62Ax) || defined(STM8AF626x) 122 | FLASH_STATUS_END_HIGH_VOLTAGE = (uint8_t)0x40, /*!< End of high voltage */ 123 | #endif /* STM8S208, STM8S207, STM8S105, STM8AF62Ax, STM8AF52Ax, STM8AF626x */ 124 | FLASH_STATUS_SUCCESSFUL_OPERATION = (uint8_t)0x04, /*!< End of operation flag */ 125 | FLASH_STATUS_TIMEOUT = (uint8_t)0x02, /*!< Time out error */ 126 | FLASH_STATUS_WRITE_PROTECTION_ERROR = (uint8_t)0x01 /*!< Write attempted to protected page */ 127 | } FLASH_Status_TypeDef; 128 | 129 | /** 130 | * @brief FLASH flags definition 131 | * - Warning : FLAG value = mapping position register 132 | */ 133 | typedef enum { 134 | #if defined (STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8S105) || \ 135 | defined(STM8S005) || defined (STM8AF52Ax) || defined (STM8AF62Ax) || defined(STM8AF626x) 136 | FLASH_FLAG_HVOFF = (uint8_t)0x40, /*!< End of high voltage flag */ 137 | #endif /* STM8S208, STM8S207, STM8S105, STM8AF62Ax, STM8AF52Ax, STM8AF626x */ 138 | FLASH_FLAG_DUL = (uint8_t)0x08, /*!< Data EEPROM unlocked flag */ 139 | FLASH_FLAG_EOP = (uint8_t)0x04, /*!< End of programming (write or erase operation) flag */ 140 | FLASH_FLAG_PUL = (uint8_t)0x02, /*!< Flash Program memory unlocked flag */ 141 | FLASH_FLAG_WR_PG_DIS = (uint8_t)0x01 /*!< Write attempted to protected page flag */ 142 | } FLASH_Flag_TypeDef; 143 | 144 | /** 145 | * @} 146 | */ 147 | 148 | /* Private macros ------------------------------------------------------------*/ 149 | 150 | /** 151 | * @brief Macros used by the assert function in order to check the different functions parameters. 152 | * @addtogroup FLASH_Private_Macros 153 | * @{ 154 | */ 155 | 156 | /** 157 | * @brief Macro used by the assert function in order to check the different sensitivity values for the flash program Address 158 | */ 159 | 160 | #define IS_FLASH_PROG_ADDRESS_OK(ADDRESS) (((ADDRESS) >= FLASH_PROG_START_PHYSICAL_ADDRESS) && \ 161 | ((ADDRESS) <= FLASH_PROG_END_PHYSICAL_ADDRESS)) 162 | 163 | /** 164 | * @brief Macro used by the assert function in order to check the different sensitivity values for the data eeprom Address 165 | */ 166 | 167 | #define IS_FLASH_DATA_ADDRESS_OK(ADDRESS) (((ADDRESS) >= FLASH_DATA_START_PHYSICAL_ADDRESS) && \ 168 | ((ADDRESS) <= FLASH_DATA_END_PHYSICAL_ADDRESS)) 169 | 170 | /** 171 | * @brief Macro used by the assert function in order to check the different sensitivity values for the data eeprom and flash program Address 172 | */ 173 | #define IS_FLASH_ADDRESS_OK(ADDRESS)((((ADDRESS) >= FLASH_PROG_START_PHYSICAL_ADDRESS) && ((ADDRESS) <= FLASH_PROG_END_PHYSICAL_ADDRESS)) || \ 174 | (((ADDRESS) >= FLASH_DATA_START_PHYSICAL_ADDRESS) && ((ADDRESS) <= FLASH_DATA_END_PHYSICAL_ADDRESS))) 175 | 176 | /** 177 | * @brief Macro used by the assert function in order to check the different sensitivity values for the flash program Block number 178 | */ 179 | #define IS_FLASH_PROG_BLOCK_NUMBER_OK(BLOCKNUM) ((BLOCKNUM) < FLASH_PROG_BLOCKS_NUMBER) 180 | 181 | /** 182 | * @brief Macro used by the assert function in order to check the different sensitivity values for the data eeprom Block number 183 | */ 184 | #define IS_FLASH_DATA_BLOCK_NUMBER_OK(BLOCKNUM) ((BLOCKNUM) < FLASH_DATA_BLOCKS_NUMBER) 185 | 186 | /** 187 | * @brief Macro used by the assert function in order to check the different sensitivity values for the flash memory type 188 | */ 189 | 190 | #define IS_MEMORY_TYPE_OK(MEMTYPE) (((MEMTYPE) == FLASH_MEMTYPE_PROG) || \ 191 | ((MEMTYPE) == FLASH_MEMTYPE_DATA)) 192 | 193 | /** 194 | * @brief Macro used by the assert function in order to check the different sensitivity values for the flash program mode 195 | */ 196 | 197 | #define IS_FLASH_PROGRAM_MODE_OK(MODE) (((MODE) == FLASH_PROGRAMMODE_STANDARD) || \ 198 | ((MODE) == FLASH_PROGRAMMODE_FAST)) 199 | 200 | /** 201 | * @brief Macro used by the assert function in order to check the program time mode 202 | */ 203 | 204 | #define IS_FLASH_PROGRAM_TIME_OK(TIME) (((TIME) == FLASH_PROGRAMTIME_STANDARD) || \ 205 | ((TIME) == FLASH_PROGRAMTIME_TPROG)) 206 | 207 | /** 208 | * @brief Macro used by the assert function in order to check the different 209 | * sensitivity values for the low power mode 210 | */ 211 | 212 | #define IS_FLASH_LOW_POWER_MODE_OK(LPMODE) (((LPMODE) == FLASH_LPMODE_POWERDOWN) || \ 213 | ((LPMODE) == FLASH_LPMODE_STANDBY) || \ 214 | ((LPMODE) == FLASH_LPMODE_POWERDOWN_STANDBY) || \ 215 | ((LPMODE) == FLASH_LPMODE_STANDBY_POWERDOWN)) 216 | 217 | /** 218 | * @brief Macro used by the assert function in order to check the different 219 | * sensitivity values for the option bytes Address 220 | */ 221 | #define IS_OPTION_BYTE_ADDRESS_OK(ADDRESS) (((ADDRESS) >= OPTION_BYTE_START_PHYSICAL_ADDRESS) && \ 222 | ((ADDRESS) <= OPTION_BYTE_END_PHYSICAL_ADDRESS)) 223 | 224 | 225 | /** 226 | * @brief Macro used by the assert function in order to check the different flags values 227 | */ 228 | #if defined (STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8S105) || \ 229 | defined(STM8S005) || defined (STM8AF52Ax) || defined (STM8AF62Ax) || defined(STM8AF626x) 230 | #define IS_FLASH_FLAGS_OK(FLAG) (((FLAG) == FLASH_FLAG_HVOFF) || \ 231 | ((FLAG) == FLASH_FLAG_DUL) || \ 232 | ((FLAG) == FLASH_FLAG_EOP) || \ 233 | ((FLAG) == FLASH_FLAG_PUL) || \ 234 | ((FLAG) == FLASH_FLAG_WR_PG_DIS)) 235 | #else /* STM8S103, STM8S903 */ 236 | #define IS_FLASH_FLAGS_OK(FLAG) (((FLAG) == FLASH_FLAG_DUL) || \ 237 | ((FLAG) == FLASH_FLAG_EOP) || \ 238 | ((FLAG) == FLASH_FLAG_PUL) || \ 239 | ((FLAG) == FLASH_FLAG_WR_PG_DIS)) 240 | #endif /* STM8S208, STM8S207, STM8S105, STM8AF62Ax, STM8AF52Ax, STM8AF626x */ 241 | /** 242 | * @} 243 | */ 244 | 245 | /* Exported functions ------------------------------------------------------- */ 246 | 247 | /** @addtogroup FLASH_Exported_Functions 248 | * @{ 249 | */ 250 | void FLASH_Unlock(FLASH_MemType_TypeDef FLASH_MemType); 251 | void FLASH_Lock(FLASH_MemType_TypeDef FLASH_MemType); 252 | void FLASH_DeInit(void); 253 | void FLASH_ITConfig(FunctionalState NewState); 254 | void FLASH_EraseByte(uint32_t Address); 255 | void FLASH_ProgramByte(uint32_t Address, uint8_t Data); 256 | uint8_t FLASH_ReadByte(uint32_t Address); 257 | void FLASH_ProgramWord(uint32_t Address, uint32_t Data); 258 | uint16_t FLASH_ReadOptionByte(uint16_t Address); 259 | void FLASH_ProgramOptionByte(uint16_t Address, uint8_t Data); 260 | void FLASH_EraseOptionByte(uint16_t Address); 261 | void FLASH_SetLowPowerMode(FLASH_LPMode_TypeDef FLASH_LPMode); 262 | void FLASH_SetProgrammingTime(FLASH_ProgramTime_TypeDef FLASH_ProgTime); 263 | FLASH_LPMode_TypeDef FLASH_GetLowPowerMode(void); 264 | FLASH_ProgramTime_TypeDef FLASH_GetProgrammingTime(void); 265 | uint32_t FLASH_GetBootSize(void); 266 | FlagStatus FLASH_GetFlagStatus(FLASH_Flag_TypeDef FLASH_FLAG); 267 | 268 | /** 269 | @code 270 | All the functions declared below must be executed from RAM exclusively, except 271 | for the FLASH_WaitForLastOperation function which can be executed from Flash. 272 | 273 | Steps of the execution from RAM differs from one toolchain to another. 274 | for more details refer to stm8s_flash.c file. 275 | 276 | To enable execution from RAM you can either uncomment the following define 277 | in the stm8s.h file or define it in your toolchain compiler preprocessor 278 | - #define RAM_EXECUTION (1) 279 | 280 | @endcode 281 | */ 282 | IN_RAM(void FLASH_EraseBlock(uint16_t BlockNum, FLASH_MemType_TypeDef FLASH_MemType)); 283 | IN_RAM(void FLASH_ProgramBlock(uint16_t BlockNum, FLASH_MemType_TypeDef FLASH_MemType, 284 | FLASH_ProgramMode_TypeDef FLASH_ProgMode, uint8_t *Buffer)); 285 | IN_RAM(FLASH_Status_TypeDef FLASH_WaitForLastOperation(FLASH_MemType_TypeDef FLASH_MemType)); 286 | 287 | /** 288 | * @} 289 | */ 290 | 291 | #endif /*__STM8S_FLASH_H */ 292 | 293 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 294 | -------------------------------------------------------------------------------- /mcu/std_lib/inc/stm8s_gpio.h: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm8s_gpio.h 4 | * @author MCD Application Team 5 | * @version V2.1.0 6 | * @date 18-November-2011 7 | * @brief This file contains all functions prototype and macros for the GPIO peripheral. 8 | ****************************************************************************** 9 | * @attention 10 | * 11 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 12 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 13 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 14 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 15 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 16 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 17 | * 18 | *

© COPYRIGHT 2011 STMicroelectronics

19 | ****************************************************************************** 20 | */ 21 | 22 | /* Define to prevent recursive inclusion -------------------------------------*/ 23 | #ifndef __STM8S_GPIO_H 24 | #define __STM8S_GPIO_H 25 | 26 | /* Includes ------------------------------------------------------------------*/ 27 | #include "stm8s.h" 28 | 29 | /* Exported variables ------------------------------------------------------- */ 30 | /* Exported types ------------------------------------------------------------*/ 31 | 32 | /** @addtogroup GPIO_Exported_Types 33 | * @{ 34 | */ 35 | 36 | /** 37 | * @brief GPIO modes 38 | * 39 | * Bits definitions: 40 | * - Bit 7: 0 = INPUT mode 41 | * 1 = OUTPUT mode 42 | * 1 = PULL-UP (input) or PUSH-PULL (output) 43 | * - Bit 5: 0 = No external interrupt (input) or No slope control (output) 44 | * 1 = External interrupt (input) or Slow control enabled (output) 45 | * - Bit 4: 0 = Low level (output) 46 | * 1 = High level (output push-pull) or HI-Z (output open-drain) 47 | */ 48 | typedef enum 49 | { 50 | GPIO_MODE_IN_FL_NO_IT = (uint8_t)0x00, /*!< Input floating, no external interrupt */ 51 | GPIO_MODE_IN_PU_NO_IT = (uint8_t)0x40, /*!< Input pull-up, no external interrupt */ 52 | GPIO_MODE_IN_FL_IT = (uint8_t)0x20, /*!< Input floating, external interrupt */ 53 | GPIO_MODE_IN_PU_IT = (uint8_t)0x60, /*!< Input pull-up, external interrupt */ 54 | GPIO_MODE_OUT_OD_LOW_FAST = (uint8_t)0xA0, /*!< Output open-drain, low level, 10MHz */ 55 | GPIO_MODE_OUT_PP_LOW_FAST = (uint8_t)0xE0, /*!< Output push-pull, low level, 10MHz */ 56 | GPIO_MODE_OUT_OD_LOW_SLOW = (uint8_t)0x80, /*!< Output open-drain, low level, 2MHz */ 57 | GPIO_MODE_OUT_PP_LOW_SLOW = (uint8_t)0xC0, /*!< Output push-pull, low level, 2MHz */ 58 | GPIO_MODE_OUT_OD_HIZ_FAST = (uint8_t)0xB0, /*!< Output open-drain, high-impedance level,10MHz */ 59 | GPIO_MODE_OUT_PP_HIGH_FAST = (uint8_t)0xF0, /*!< Output push-pull, high level, 10MHz */ 60 | GPIO_MODE_OUT_OD_HIZ_SLOW = (uint8_t)0x90, /*!< Output open-drain, high-impedance level, 2MHz */ 61 | GPIO_MODE_OUT_PP_HIGH_SLOW = (uint8_t)0xD0 /*!< Output push-pull, high level, 2MHz */ 62 | }GPIO_Mode_TypeDef; 63 | 64 | /** 65 | * @brief Definition of the GPIO pins. Used by the @ref GPIO_Init function in 66 | * order to select the pins to be initialized. 67 | */ 68 | 69 | typedef enum 70 | { 71 | GPIO_PIN_0 = ((uint8_t)0x01), /*!< Pin 0 selected */ 72 | GPIO_PIN_1 = ((uint8_t)0x02), /*!< Pin 1 selected */ 73 | GPIO_PIN_2 = ((uint8_t)0x04), /*!< Pin 2 selected */ 74 | GPIO_PIN_3 = ((uint8_t)0x08), /*!< Pin 3 selected */ 75 | GPIO_PIN_4 = ((uint8_t)0x10), /*!< Pin 4 selected */ 76 | GPIO_PIN_5 = ((uint8_t)0x20), /*!< Pin 5 selected */ 77 | GPIO_PIN_6 = ((uint8_t)0x40), /*!< Pin 6 selected */ 78 | GPIO_PIN_7 = ((uint8_t)0x80), /*!< Pin 7 selected */ 79 | GPIO_PIN_LNIB = ((uint8_t)0x0F), /*!< Low nibble pins selected */ 80 | GPIO_PIN_HNIB = ((uint8_t)0xF0), /*!< High nibble pins selected */ 81 | GPIO_PIN_ALL = ((uint8_t)0xFF) /*!< All pins selected */ 82 | }GPIO_Pin_TypeDef; 83 | 84 | /** 85 | * @} 86 | */ 87 | 88 | /* Exported constants --------------------------------------------------------*/ 89 | /* Exported macros -----------------------------------------------------------*/ 90 | /* Private macros ------------------------------------------------------------*/ 91 | 92 | /** @addtogroup GPIO_Private_Macros 93 | * @{ 94 | */ 95 | 96 | /** 97 | * @brief Macro used by the assert function to check the different functions parameters. 98 | */ 99 | 100 | /** 101 | * @brief Macro used by the assert function in order to check the different 102 | * values of GPIOMode_TypeDef. 103 | */ 104 | #define IS_GPIO_MODE_OK(MODE) \ 105 | (((MODE) == GPIO_MODE_IN_FL_NO_IT) || \ 106 | ((MODE) == GPIO_MODE_IN_PU_NO_IT) || \ 107 | ((MODE) == GPIO_MODE_IN_FL_IT) || \ 108 | ((MODE) == GPIO_MODE_IN_PU_IT) || \ 109 | ((MODE) == GPIO_MODE_OUT_OD_LOW_FAST) || \ 110 | ((MODE) == GPIO_MODE_OUT_PP_LOW_FAST) || \ 111 | ((MODE) == GPIO_MODE_OUT_OD_LOW_SLOW) || \ 112 | ((MODE) == GPIO_MODE_OUT_PP_LOW_SLOW) || \ 113 | ((MODE) == GPIO_MODE_OUT_OD_HIZ_FAST) || \ 114 | ((MODE) == GPIO_MODE_OUT_PP_HIGH_FAST) || \ 115 | ((MODE) == GPIO_MODE_OUT_OD_HIZ_SLOW) || \ 116 | ((MODE) == GPIO_MODE_OUT_PP_HIGH_SLOW)) 117 | 118 | /** 119 | * @brief Macro used by the assert function in order to check the different 120 | * values of GPIO_Pins. 121 | */ 122 | #define IS_GPIO_PIN_OK(PIN) ((PIN) != (uint8_t)0x00) 123 | 124 | /** 125 | * @} 126 | */ 127 | 128 | /* Exported functions ------------------------------------------------------- */ 129 | /** @addtogroup GPIO_Exported_Functions 130 | * @{ 131 | */ 132 | 133 | void GPIO_DeInit(GPIO_TypeDef* GPIOx); 134 | void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, GPIO_Mode_TypeDef GPIO_Mode); 135 | void GPIO_Write(GPIO_TypeDef* GPIOx, uint8_t PortVal); 136 | void GPIO_WriteHigh(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins); 137 | void GPIO_WriteLow(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins); 138 | void GPIO_WriteReverse(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins); 139 | uint8_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx); 140 | uint8_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx); 141 | BitStatus GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin); 142 | void GPIO_ExternalPullUpConfig(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, FunctionalState NewState); 143 | /** 144 | * @} 145 | */ 146 | 147 | #endif /* __STM8L_GPIO_H */ 148 | 149 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 150 | -------------------------------------------------------------------------------- /mcu/std_lib/inc/stm8s_itc.h: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm8s_itc.h 4 | * @author MCD Application Team 5 | * @version V2.1.0 6 | * @date 18-November-2011 7 | * @brief This file contains all functions prototype and macros for the ITC peripheral. 8 | ****************************************************************************** 9 | * @attention 10 | * 11 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 12 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 13 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 14 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 15 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 16 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 17 | * 18 | *

© COPYRIGHT 2011 STMicroelectronics

19 | ****************************************************************************** 20 | */ 21 | 22 | /* Define to prevent recursive inclusion -------------------------------------*/ 23 | #ifndef __STM8S_ITC_H__ 24 | #define __STM8S_ITC_H__ 25 | 26 | /* Includes ------------------------------------------------------------------*/ 27 | #include "stm8s.h" 28 | 29 | /* Exported types ------------------------------------------------------------*/ 30 | 31 | /** @addtogroup ITC_Exported_Types 32 | * @{ 33 | */ 34 | 35 | /** 36 | * @brief ITC Interrupt Lines selection 37 | */ 38 | typedef enum { 39 | ITC_IRQ_TLI = (uint8_t)0, /*!< Software interrupt */ 40 | ITC_IRQ_AWU = (uint8_t)1, /*!< Auto wake up from halt interrupt */ 41 | ITC_IRQ_CLK = (uint8_t)2, /*!< Clock controller interrupt */ 42 | ITC_IRQ_PORTA = (uint8_t)3, /*!< Port A external interrupts */ 43 | ITC_IRQ_PORTB = (uint8_t)4, /*!< Port B external interrupts */ 44 | ITC_IRQ_PORTC = (uint8_t)5, /*!< Port C external interrupts */ 45 | ITC_IRQ_PORTD = (uint8_t)6, /*!< Port D external interrupts */ 46 | ITC_IRQ_PORTE = (uint8_t)7, /*!< Port E external interrupts */ 47 | 48 | #if defined(STM8S208) || defined(STM8AF52Ax) 49 | ITC_IRQ_CAN_RX = (uint8_t)8, /*!< beCAN RX interrupt */ 50 | ITC_IRQ_CAN_TX = (uint8_t)9, /*!< beCAN TX/ER/SC interrupt */ 51 | #endif /*STM8S208 or STM8AF52Ax */ 52 | 53 | #ifdef STM8S903 54 | ITC_IRQ_PORTF = (uint8_t)8, /*!< Port F external interrupts */ 55 | #endif /*STM8S903*/ 56 | 57 | ITC_IRQ_SPI = (uint8_t)10, /*!< SPI interrupt */ 58 | ITC_IRQ_TIM1_OVF = (uint8_t)11, /*!< TIM1 update/overflow/underflow/trigger/ 59 | break interrupt*/ 60 | ITC_IRQ_TIM1_CAPCOM = (uint8_t)12, /*!< TIM1 capture/compare interrupt */ 61 | 62 | #ifdef STM8S903 63 | ITC_IRQ_TIM5_OVFTRI = (uint8_t)13, /*!< TIM5 update/overflow/underflow/trigger/ 64 | interrupt */ 65 | ITC_IRQ_TIM5_CAPCOM = (uint8_t)14, /*!< TIM5 capture/compare interrupt */ 66 | #else 67 | ITC_IRQ_TIM2_OVF = (uint8_t)13, /*!< TIM2 update /overflow interrupt */ 68 | ITC_IRQ_TIM2_CAPCOM = (uint8_t)14, /*!< TIM2 capture/compare interrupt */ 69 | #endif /*STM8S903*/ 70 | 71 | ITC_IRQ_TIM3_OVF = (uint8_t)15, /*!< TIM3 update /overflow interrupt*/ 72 | ITC_IRQ_TIM3_CAPCOM = (uint8_t)16, /*!< TIM3 update /overflow interrupt */ 73 | ITC_IRQ_UART1_TX = (uint8_t)17, /*!< USART1 TX interrupt */ 74 | ITC_IRQ_UART1_RX = (uint8_t)18, /*!< USART1 RX interrupt */ 75 | ITC_IRQ_I2C = (uint8_t)19, /*!< I2C interrupt */ 76 | 77 | #if defined(STM8S105) || defined(STM8S005) || defined(STM8AF626x) 78 | ITC_IRQ_UART2_TX = (uint8_t)20, /*!< USART2 TX interrupt */ 79 | ITC_IRQ_UART2_RX = (uint8_t)21, /*!< USART2 RX interrupt */ 80 | #endif /*STM8S105 or STM8AF626x */ 81 | 82 | #if defined(STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8AF52Ax) || defined(STM8AF62Ax) 83 | ITC_IRQ_UART3_TX = (uint8_t)20, /*!< USART3 TX interrupt */ 84 | ITC_IRQ_UART3_RX = (uint8_t)21, /*!< USART3 RX interrupt */ 85 | ITC_IRQ_ADC2 = (uint8_t)22, /*!< ADC2 interrupt */ 86 | #endif /*STM8S208 or STM8S207 or STM8AF52Ax or STM8AF62Ax */ 87 | 88 | #if defined(STM8S105) || defined(STM8S005) || defined(STM8S103) || defined(STM8S003) || defined(STM8S903) || defined(STM8AF626x) 89 | ITC_IRQ_ADC1 = (uint8_t)22, /*!< ADC2 interrupt */ 90 | #endif /*STM8S105, STM8S103 or STM8S903 or STM8AF626x */ 91 | 92 | #ifdef STM8S903 93 | ITC_IRQ_TIM6_OVFTRI = (uint8_t)23, /*!< TIM6 update/overflow/underflow/trigger/ 94 | interrupt */ 95 | #else 96 | ITC_IRQ_TIM4_OVF = (uint8_t)23, /*!< TIM4 update /overflow interrupt */ 97 | #endif /*STM8S903*/ 98 | 99 | ITC_IRQ_EEPROM_EEC = (uint8_t)24 /*!< Flash interrupt */ 100 | } ITC_Irq_TypeDef; 101 | 102 | /** 103 | * @brief ITC Priority Levels selection 104 | */ 105 | typedef enum { 106 | ITC_PRIORITYLEVEL_0 = (uint8_t)0x02, /*!< Software priority level 0 (cannot be written) */ 107 | ITC_PRIORITYLEVEL_1 = (uint8_t)0x01, /*!< Software priority level 1 */ 108 | ITC_PRIORITYLEVEL_2 = (uint8_t)0x00, /*!< Software priority level 2 */ 109 | ITC_PRIORITYLEVEL_3 = (uint8_t)0x03 /*!< Software priority level 3 */ 110 | } ITC_PriorityLevel_TypeDef; 111 | 112 | /** 113 | * @} 114 | */ 115 | 116 | /* Exported constants --------------------------------------------------------*/ 117 | 118 | /** @addtogroup ITC_Exported_Constants 119 | * @{ 120 | */ 121 | 122 | #define CPU_SOFT_INT_DISABLED ((uint8_t)0x28) /*!< Mask for I1 and I0 bits in CPU_CC register */ 123 | 124 | /** 125 | * @} 126 | */ 127 | 128 | /* Private macros ------------------------------------------------------------*/ 129 | 130 | /** 131 | * @brief Macros used by the assert function in order to check the different functions parameters. 132 | * @addtogroup ITC_Private_Macros 133 | * @{ 134 | */ 135 | 136 | /* Used by assert function */ 137 | #define IS_ITC_IRQ_OK(IRQ) ((IRQ) <= (uint8_t)24) 138 | 139 | /* Used by assert function */ 140 | #define IS_ITC_PRIORITY_OK(PriorityValue) \ 141 | (((PriorityValue) == ITC_PRIORITYLEVEL_0) || \ 142 | ((PriorityValue) == ITC_PRIORITYLEVEL_1) || \ 143 | ((PriorityValue) == ITC_PRIORITYLEVEL_2) || \ 144 | ((PriorityValue) == ITC_PRIORITYLEVEL_3)) 145 | 146 | /* Used by assert function */ 147 | #define IS_ITC_INTERRUPTS_DISABLED (ITC_GetSoftIntStatus() == CPU_SOFT_INT_DISABLED) 148 | 149 | /** 150 | * @} 151 | */ 152 | 153 | /* Exported functions ------------------------------------------------------- */ 154 | 155 | /** @addtogroup ITC_Exported_Functions 156 | * @{ 157 | */ 158 | 159 | uint8_t ITC_GetCPUCC(void); 160 | void ITC_DeInit(void); 161 | uint8_t ITC_GetSoftIntStatus(void); 162 | void ITC_SetSoftwarePriority(ITC_Irq_TypeDef IrqNum, ITC_PriorityLevel_TypeDef PriorityValue); 163 | ITC_PriorityLevel_TypeDef ITC_GetSoftwarePriority(ITC_Irq_TypeDef IrqNum); 164 | 165 | /** 166 | * @} 167 | */ 168 | 169 | #endif /* __STM8S_ITC_H__ */ 170 | 171 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 172 | -------------------------------------------------------------------------------- /mcu/std_lib/inc/stm8s_iwdg.h: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm8s_iwdg.h 4 | * @author MCD Application Team 5 | * @version V2.1.0 6 | * @date 18-November-2011 7 | * @brief This file contains all functions prototypes and macros for the IWDG peripheral. 8 | ****************************************************************************** 9 | * @attention 10 | * 11 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 12 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 13 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 14 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 15 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 16 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 17 | * 18 | *

© COPYRIGHT 2011 STMicroelectronics

19 | ****************************************************************************** 20 | */ 21 | 22 | /* Define to prevent recursive inclusion -------------------------------------*/ 23 | #ifndef __STM8S_IWDG_H 24 | #define __STM8S_IWDG_H 25 | 26 | /* Includes ------------------------------------------------------------------*/ 27 | #include "stm8s.h" 28 | 29 | /** @addtogroup STM8S_StdPeriph_Driver 30 | * @{ 31 | */ 32 | 33 | /** @addtogroup IWDG_Private_Define 34 | * @{ 35 | */ 36 | 37 | /** 38 | * @brief Define used to prevent watchdog reset 39 | */ 40 | #define IWDG_KEY_REFRESH ((uint8_t)0xAA) /*!< This value written in the Key register prevent the watchdog reset */ 41 | 42 | /** 43 | * @brief Define used to start the watchdog counter down 44 | */ 45 | #define IWDG_KEY_ENABLE ((uint8_t)0xCC) /*!< This value written in the Key register start the watchdog counting down*/ 46 | 47 | /** 48 | * @} 49 | */ 50 | 51 | /** @addtogroup IWDG_Private_Macros 52 | * @{ 53 | */ 54 | 55 | /** 56 | * @brief Macro used by the assert function in order to check the different 57 | * values of the prescaler. 58 | */ 59 | #define IS_IWDG_PRESCALER_OK(VALUE) (((VALUE) == IWDG_Prescaler_4 ) || \ 60 | ((VALUE) == IWDG_Prescaler_8 ) || \ 61 | ((VALUE) == IWDG_Prescaler_16 ) || \ 62 | ((VALUE) == IWDG_Prescaler_32 ) || \ 63 | ((VALUE) == IWDG_Prescaler_64 ) || \ 64 | ((VALUE) == IWDG_Prescaler_128 ) || \ 65 | ((VALUE) == IWDG_Prescaler_256)) 66 | 67 | /** 68 | * @brief Macro used by the assert function in order to check the different 69 | * values of the counter register. 70 | */ 71 | #define IS_IWDG_WRITEACCESS_MODE_OK(MODE) (((MODE) == IWDG_WriteAccess_Enable) || ((MODE) == IWDG_WriteAccess_Disable)) 72 | 73 | /** 74 | * @} 75 | */ 76 | 77 | /** @addtogroup IWDG_Exported_Types 78 | * @{ 79 | */ 80 | 81 | /** IWDG write acces enumeration */ 82 | typedef enum 83 | { 84 | IWDG_WriteAccess_Enable = (uint8_t)0x55, /*!< Code 0x55 in Key register, allow write access to Prescaler and Reload registers */ 85 | IWDG_WriteAccess_Disable = (uint8_t)0x00 /*!< Code 0x00 in Key register, not allow write access to Prescaler and Reload registers */ 86 | } IWDG_WriteAccess_TypeDef; 87 | 88 | /** IWDG prescaler enumaration */ 89 | typedef enum 90 | { 91 | IWDG_Prescaler_4 = (uint8_t)0x00, /*!< Used to set prescaler register to 4 */ 92 | IWDG_Prescaler_8 = (uint8_t)0x01, /*!< Used to set prescaler register to 8 */ 93 | IWDG_Prescaler_16 = (uint8_t)0x02, /*!< Used to set prescaler register to 16 */ 94 | IWDG_Prescaler_32 = (uint8_t)0x03, /*!< Used to set prescaler register to 32 */ 95 | IWDG_Prescaler_64 = (uint8_t)0x04, /*!< Used to set prescaler register to 64 */ 96 | IWDG_Prescaler_128 = (uint8_t)0x05, /*!< Used to set prescaler register to 128 */ 97 | IWDG_Prescaler_256 = (uint8_t)0x06 /*!< Used to set prescaler register to 256 */ 98 | } IWDG_Prescaler_TypeDef; 99 | 100 | /** 101 | * @} 102 | */ 103 | 104 | /** @addtogroup IWDG_Exported_Functions 105 | * @{ 106 | */ 107 | 108 | void IWDG_WriteAccessCmd(IWDG_WriteAccess_TypeDef IWDG_WriteAccess); 109 | void IWDG_SetPrescaler(IWDG_Prescaler_TypeDef IWDG_Prescaler); 110 | void IWDG_SetReload(uint8_t IWDG_Reload); 111 | void IWDG_ReloadCounter(void); 112 | void IWDG_Enable(void); 113 | 114 | /** 115 | * @} 116 | */ 117 | 118 | #endif /* __STM8S_IWDG_H */ 119 | 120 | /** 121 | * @} 122 | */ 123 | 124 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 125 | -------------------------------------------------------------------------------- /mcu/std_lib/inc/stm8s_rst.h: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm8s_rst.h 4 | * @author MCD Application Team 5 | * @version V2.1.0 6 | * @date 18-November-2011 7 | * @brief This file contains all functions prototype and macros for the RST peripheral. 8 | ****************************************************************************** 9 | * @attention 10 | * 11 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 12 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 13 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 14 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 15 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 16 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 17 | * 18 | *

© COPYRIGHT 2011 STMicroelectronics

19 | ****************************************************************************** 20 | */ 21 | /* Define to prevent recursive inclusion -------------------------------------*/ 22 | #ifndef __STM8S_RST_H 23 | #define __STM8S_RST_H 24 | 25 | /* Includes ------------------------------------------------------------------*/ 26 | #include "stm8s.h" 27 | 28 | /** @addtogroup STM8S_StdPeriph_Driver 29 | * @{ 30 | */ 31 | 32 | /** @addtogroup RST_Exported_Types 33 | * @{ 34 | */ 35 | typedef enum { 36 | RST_FLAG_EMCF = (uint8_t)0x10, /*!< EMC reset flag */ 37 | RST_FLAG_SWIMF = (uint8_t)0x08, /*!< SWIM reset flag */ 38 | RST_FLAG_ILLOPF = (uint8_t)0x04, /*!< Illigal opcode reset flag */ 39 | RST_FLAG_IWDGF = (uint8_t)0x02, /*!< Independent watchdog reset flag */ 40 | RST_FLAG_WWDGF = (uint8_t)0x01 /*!< Window watchdog reset flag */ 41 | }RST_Flag_TypeDef; 42 | 43 | /** 44 | * @} 45 | */ 46 | 47 | /* Exported constants --------------------------------------------------------*/ 48 | /* Exported macros -----------------------------------------------------------*/ 49 | 50 | /** @addtogroup RST_Private_Macros 51 | * @{ 52 | */ 53 | 54 | /** 55 | * @brief Macro used by the assert function to check the different functions parameters. 56 | */ 57 | /** 58 | * @brief Macro used by the assert function to check the different RST flags. 59 | */ 60 | #define IS_RST_FLAG_OK(FLAG) (((FLAG) == RST_FLAG_EMCF) || \ 61 | ((FLAG) == RST_FLAG_SWIMF) ||\ 62 | ((FLAG) == RST_FLAG_ILLOPF) ||\ 63 | ((FLAG) == RST_FLAG_IWDGF) ||\ 64 | ((FLAG) == RST_FLAG_WWDGF)) 65 | 66 | /** 67 | * @} 68 | */ 69 | 70 | /** @addtogroup RST_Exported_functions 71 | * @{ 72 | */ 73 | FlagStatus RST_GetFlagStatus(RST_Flag_TypeDef RST_Flag); 74 | void RST_ClearFlag(RST_Flag_TypeDef RST_Flag); 75 | 76 | /** 77 | * @} 78 | */ 79 | 80 | #endif /* __STM8S_RST_H */ 81 | 82 | /** 83 | * @} 84 | */ 85 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 86 | -------------------------------------------------------------------------------- /mcu/std_lib/inc/stm8s_spi.h: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm8s_spi.h 4 | * @author MCD Application Team 5 | * @version V2.1.0 6 | * @date 18-November-2011 7 | * @brief This file contains all functions prototype and macros for the SPI peripheral. 8 | ****************************************************************************** 9 | * @attention 10 | * 11 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 12 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 13 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 14 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 15 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 16 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 17 | * 18 | *

© COPYRIGHT 2011 STMicroelectronics

19 | ****************************************************************************** 20 | */ 21 | 22 | /* Define to prevent recursive inclusion -------------------------------------*/ 23 | #ifndef __STM8S_SPI_H 24 | #define __STM8S_SPI_H 25 | 26 | /* Includes ------------------------------------------------------------------*/ 27 | #include "stm8s.h" 28 | 29 | /** @addtogroup STM8S_StdPeriph_Driver 30 | * @{ 31 | */ 32 | 33 | /** @addtogroup SPI_Exported_Types 34 | * @{ 35 | */ 36 | 37 | /** 38 | * @brief SPI data direction mode 39 | * Warning: element values correspond to BDM, BDOE, RXONLY bits position 40 | */ 41 | typedef enum { 42 | SPI_DATADIRECTION_2LINES_FULLDUPLEX = (uint8_t)0x00, /*!< 2-line uni-directional data mode enable */ 43 | SPI_DATADIRECTION_2LINES_RXONLY = (uint8_t)0x04, /*!< Receiver only in 2 line uni-directional data mode */ 44 | SPI_DATADIRECTION_1LINE_RX = (uint8_t)0x80, /*!< Receiver only in 1 line bi-directional data mode */ 45 | SPI_DATADIRECTION_1LINE_TX = (uint8_t)0xC0 /*!< Transmit only in 1 line bi-directional data mode */ 46 | } SPI_DataDirection_TypeDef; 47 | 48 | /** 49 | * @brief SPI Slave Select management 50 | * Warning: element values correspond to LSBFIRST bit position 51 | */ 52 | typedef enum 53 | { 54 | SPI_NSS_SOFT = (uint8_t)0x02, /*!< Software slave management disabled */ 55 | SPI_NSS_HARD = (uint8_t)0x00 /*!< Software slave management enabled */ 56 | } SPI_NSS_TypeDef; 57 | 58 | 59 | /** 60 | * @brief SPI direction transmit/receive 61 | */ 62 | 63 | typedef enum { 64 | SPI_DIRECTION_RX = (uint8_t)0x00, /*!< Selects Rx receive direction in bi-directional mode */ 65 | SPI_DIRECTION_TX = (uint8_t)0x01 /*!< Selects Tx transmission direction in bi-directional mode */ 66 | } SPI_Direction_TypeDef; 67 | 68 | /** 69 | * @brief SPI master/slave mode 70 | * Warning: element values correspond to MSTR bit position 71 | */ 72 | typedef enum { 73 | SPI_MODE_MASTER = (uint8_t)0x04, /*!< SPI Master configuration */ 74 | SPI_MODE_SLAVE = (uint8_t)0x00 /*!< SPI Slave configuration */ 75 | } SPI_Mode_TypeDef; 76 | 77 | /** 78 | * @brief SPI BaudRate Prescaler 79 | * Warning: element values correspond to BR bits position 80 | */ 81 | typedef enum { 82 | SPI_BAUDRATEPRESCALER_2 = (uint8_t)0x00, /*!< SPI frequency = frequency(CPU)/2 */ 83 | SPI_BAUDRATEPRESCALER_4 = (uint8_t)0x08, /*!< SPI frequency = frequency(CPU)/4 */ 84 | SPI_BAUDRATEPRESCALER_8 = (uint8_t)0x10, /*!< SPI frequency = frequency(CPU)/8 */ 85 | SPI_BAUDRATEPRESCALER_16 = (uint8_t)0x18, /*!< SPI frequency = frequency(CPU)/16 */ 86 | SPI_BAUDRATEPRESCALER_32 = (uint8_t)0x20, /*!< SPI frequency = frequency(CPU)/32 */ 87 | SPI_BAUDRATEPRESCALER_64 = (uint8_t)0x28, /*!< SPI frequency = frequency(CPU)/64 */ 88 | SPI_BAUDRATEPRESCALER_128 = (uint8_t)0x30, /*!< SPI frequency = frequency(CPU)/128 */ 89 | SPI_BAUDRATEPRESCALER_256 = (uint8_t)0x38 /*!< SPI frequency = frequency(CPU)/256 */ 90 | } SPI_BaudRatePrescaler_TypeDef; 91 | 92 | /** 93 | * @brief SPI Clock Polarity 94 | * Warning: element values correspond to CPOL bit position 95 | */ 96 | typedef enum { 97 | SPI_CLOCKPOLARITY_LOW = (uint8_t)0x00, /*!< Clock to 0 when idle */ 98 | SPI_CLOCKPOLARITY_HIGH = (uint8_t)0x02 /*!< Clock to 1 when idle */ 99 | } SPI_ClockPolarity_TypeDef; 100 | 101 | /** 102 | * @brief SPI Clock Phase 103 | * Warning: element values correspond to CPHA bit position 104 | */ 105 | typedef enum { 106 | SPI_CLOCKPHASE_1EDGE = (uint8_t)0x00, /*!< The first clock transition is the first data capture edge */ 107 | SPI_CLOCKPHASE_2EDGE = (uint8_t)0x01 /*!< The second clock transition is the first data capture edge */ 108 | } SPI_ClockPhase_TypeDef; 109 | 110 | /** 111 | * @brief SPI Frame Format: MSB or LSB transmitted first 112 | * Warning: element values correspond to LSBFIRST bit position 113 | */ 114 | typedef enum { 115 | SPI_FIRSTBIT_MSB = (uint8_t)0x00, /*!< MSB bit will be transmitted first */ 116 | SPI_FIRSTBIT_LSB = (uint8_t)0x80 /*!< LSB bit will be transmitted first */ 117 | } SPI_FirstBit_TypeDef; 118 | 119 | /** 120 | * @brief SPI CRC Transmit/Receive 121 | */ 122 | typedef enum { 123 | SPI_CRC_RX = (uint8_t)0x00, /*!< Select Tx CRC register */ 124 | SPI_CRC_TX = (uint8_t)0x01 /*!< Select Rx CRC register */ 125 | } SPI_CRC_TypeDef; 126 | 127 | /** 128 | * @brief SPI flags definition - Warning : FLAG value = mapping position register 129 | */ 130 | typedef enum { 131 | SPI_FLAG_BSY = (uint8_t)0x80, /*!< Busy flag */ 132 | SPI_FLAG_OVR = (uint8_t)0x40, /*!< Overrun flag */ 133 | SPI_FLAG_MODF = (uint8_t)0x20, /*!< Mode fault */ 134 | SPI_FLAG_CRCERR = (uint8_t)0x10, /*!< CRC error flag */ 135 | SPI_FLAG_WKUP = (uint8_t)0x08, /*!< Wake-up flag */ 136 | SPI_FLAG_TXE = (uint8_t)0x02, /*!< Transmit buffer empty */ 137 | SPI_FLAG_RXNE = (uint8_t)0x01 /*!< Receive buffer empty */ 138 | } SPI_Flag_TypeDef; 139 | 140 | /** 141 | * @brief SPI_IT possible values 142 | * Elements values convention: 0xYX 143 | * X: Position of the corresponding Interrupt 144 | * Y: ITPENDINGBIT position 145 | */ 146 | typedef enum 147 | { 148 | SPI_IT_WKUP = (uint8_t)0x34, /*!< Wake-up interrupt*/ 149 | SPI_IT_OVR = (uint8_t)0x65, /*!< Overrun interrupt*/ 150 | SPI_IT_MODF = (uint8_t)0x55, /*!< Mode fault interrupt*/ 151 | SPI_IT_CRCERR = (uint8_t)0x45, /*!< CRC error interrupt*/ 152 | SPI_IT_TXE = (uint8_t)0x17, /*!< Transmit buffer empty interrupt*/ 153 | SPI_IT_RXNE = (uint8_t)0x06, /*!< Receive buffer not empty interrupt*/ 154 | SPI_IT_ERR = (uint8_t)0x05 /*!< Error interrupt*/ 155 | } SPI_IT_TypeDef; 156 | 157 | /** 158 | * @} 159 | */ 160 | 161 | /* Private define ------------------------------------------------------------*/ 162 | 163 | /** @addtogroup SPI_Private_Macros 164 | * @brief Macros used by the assert_param function to check the different functions parameters. 165 | * @{ 166 | */ 167 | 168 | /** 169 | * @brief Macro used by the assert_param function in order to check the data direction mode values 170 | */ 171 | #define IS_SPI_DATA_DIRECTION_OK(MODE) (((MODE) == SPI_DATADIRECTION_2LINES_FULLDUPLEX) || \ 172 | ((MODE) == SPI_DATADIRECTION_2LINES_RXONLY) || \ 173 | ((MODE) == SPI_DATADIRECTION_1LINE_RX) || \ 174 | ((MODE) == SPI_DATADIRECTION_1LINE_TX)) 175 | 176 | /** 177 | * @brief Macro used by the assert_param function in order to check the mode 178 | * half duplex data direction values 179 | */ 180 | #define IS_SPI_DIRECTION_OK(DIRECTION) (((DIRECTION) == SPI_DIRECTION_RX) || \ 181 | ((DIRECTION) == SPI_DIRECTION_TX)) 182 | 183 | /** 184 | * @brief Macro used by the assert_param function in order to check the NSS 185 | * management values 186 | */ 187 | #define IS_SPI_SLAVEMANAGEMENT_OK(NSS) (((NSS) == SPI_NSS_SOFT) || \ 188 | ((NSS) == SPI_NSS_HARD)) 189 | 190 | 191 | /** 192 | * @brief Macro used by the assert_param function in order to check the different 193 | * sensitivity values for the CRC polynomial 194 | */ 195 | #define IS_SPI_CRC_POLYNOMIAL_OK(POLYNOMIAL) ((POLYNOMIAL) > (uint8_t)0x00) 196 | 197 | /** 198 | * @brief Macro used by the assert_param function in order to check the SPI Mode values 199 | */ 200 | #define IS_SPI_MODE_OK(MODE) (((MODE) == SPI_MODE_MASTER) || \ 201 | ((MODE) == SPI_MODE_SLAVE)) 202 | 203 | /** 204 | * @brief Macro used by the assert_param function in order to check the baudrate values 205 | */ 206 | #define IS_SPI_BAUDRATE_PRESCALER_OK(PRESCALER) (((PRESCALER) == SPI_BAUDRATEPRESCALER_2) || \ 207 | ((PRESCALER) == SPI_BAUDRATEPRESCALER_4) || \ 208 | ((PRESCALER) == SPI_BAUDRATEPRESCALER_8) || \ 209 | ((PRESCALER) == SPI_BAUDRATEPRESCALER_16) || \ 210 | ((PRESCALER) == SPI_BAUDRATEPRESCALER_32) || \ 211 | ((PRESCALER) == SPI_BAUDRATEPRESCALER_64) || \ 212 | ((PRESCALER) == SPI_BAUDRATEPRESCALER_128) || \ 213 | ((PRESCALER) == SPI_BAUDRATEPRESCALER_256)) 214 | 215 | /** 216 | * @brief Macro used by the assert_param function in order to check the polarity values 217 | */ 218 | #define IS_SPI_POLARITY_OK(CLKPOL) (((CLKPOL) == SPI_CLOCKPOLARITY_LOW) || \ 219 | ((CLKPOL) == SPI_CLOCKPOLARITY_HIGH)) 220 | 221 | /** 222 | * @brief Macro used by the assert_param function in order to check the phase values 223 | */ 224 | #define IS_SPI_PHASE_OK(CLKPHA) (((CLKPHA) == SPI_CLOCKPHASE_1EDGE) || \ 225 | ((CLKPHA) == SPI_CLOCKPHASE_2EDGE)) 226 | 227 | /** 228 | * @brief Macro used by the assert_param function in order to check the first 229 | * bit to be transmited values 230 | */ 231 | #define IS_SPI_FIRSTBIT_OK(BIT) (((BIT) == SPI_FIRSTBIT_MSB) || \ 232 | ((BIT) == SPI_FIRSTBIT_LSB)) 233 | 234 | /** 235 | * @brief Macro used by the assert_param function in order to check the CRC 236 | * Transmit/Receive 237 | */ 238 | #define IS_SPI_CRC_OK(CRC) (((CRC) == SPI_CRC_TX) || \ 239 | ((CRC) == SPI_CRC_RX)) 240 | 241 | /** 242 | * @brief Macro used by the assert_param function in order to check the 243 | * different flags values 244 | */ 245 | #define IS_SPI_FLAGS_OK(FLAG) (((FLAG) == SPI_FLAG_OVR) || \ 246 | ((FLAG) == SPI_FLAG_MODF) || \ 247 | ((FLAG) == SPI_FLAG_CRCERR) || \ 248 | ((FLAG) == SPI_FLAG_WKUP) || \ 249 | ((FLAG) == SPI_FLAG_TXE) || \ 250 | ((FLAG) == SPI_FLAG_RXNE) || \ 251 | ((FLAG) == SPI_FLAG_BSY)) 252 | 253 | /** 254 | * @brief Macro used by the assert_param function in order to check the 255 | * different sensitivity values for the flag that can be cleared 256 | * by writing 0 257 | */ 258 | #define IS_SPI_CLEAR_FLAGS_OK(FLAG) (((FLAG) == SPI_FLAG_CRCERR) || \ 259 | ((FLAG) == SPI_FLAG_WKUP)) 260 | 261 | /** 262 | * @brief Macro used by the assert_param function in order to check the 263 | * different sensitivity values for the Interrupts 264 | */ 265 | #define IS_SPI_CONFIG_IT_OK(Interrupt) (((Interrupt) == SPI_IT_TXE) || \ 266 | ((Interrupt) == SPI_IT_RXNE) || \ 267 | ((Interrupt) == SPI_IT_ERR) || \ 268 | ((Interrupt) == SPI_IT_WKUP)) 269 | 270 | /** 271 | * @brief Macro used by the assert_param function in order to check the 272 | * different sensitivity values for the pending bit 273 | */ 274 | #define IS_SPI_GET_IT_OK(ITPendingBit) (((ITPendingBit) == SPI_IT_OVR) || \ 275 | ((ITPendingBit) == SPI_IT_MODF) || \ 276 | ((ITPendingBit) == SPI_IT_CRCERR) || \ 277 | ((ITPendingBit) == SPI_IT_WKUP) || \ 278 | ((ITPendingBit) == SPI_IT_TXE) || \ 279 | ((ITPendingBit) == SPI_IT_RXNE)) 280 | 281 | /** 282 | * @brief Macro used by the assert_param function in order to check the 283 | * different sensitivity values for the pending bit that can be cleared 284 | * by writing 0 285 | */ 286 | #define IS_SPI_CLEAR_IT_OK(ITPendingBit) (((ITPendingBit) == SPI_IT_CRCERR) || \ 287 | ((ITPendingBit) == SPI_IT_WKUP)) 288 | 289 | /** 290 | * @} 291 | */ 292 | 293 | /** @addtogroup SPI_Exported_Functions 294 | * @{ 295 | */ 296 | void SPI_DeInit(void); 297 | void SPI_Init(SPI_FirstBit_TypeDef FirstBit, 298 | SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler, 299 | SPI_Mode_TypeDef Mode, SPI_ClockPolarity_TypeDef ClockPolarity, 300 | SPI_ClockPhase_TypeDef ClockPhase, 301 | SPI_DataDirection_TypeDef Data_Direction, 302 | SPI_NSS_TypeDef Slave_Management, uint8_t CRCPolynomial); 303 | void SPI_Cmd(FunctionalState NewState); 304 | void SPI_ITConfig(SPI_IT_TypeDef SPI_IT, FunctionalState NewState); 305 | void SPI_SendData(uint8_t Data); 306 | uint8_t SPI_ReceiveData(void); 307 | void SPI_NSSInternalSoftwareCmd(FunctionalState NewState); 308 | void SPI_TransmitCRC(void); 309 | void SPI_CalculateCRCCmd(FunctionalState NewState); 310 | uint8_t SPI_GetCRC(SPI_CRC_TypeDef SPI_CRC); 311 | void SPI_ResetCRC(void); 312 | uint8_t SPI_GetCRCPolynomial(void); 313 | void SPI_BiDirectionalLineConfig(SPI_Direction_TypeDef SPI_Direction); 314 | FlagStatus SPI_GetFlagStatus(SPI_Flag_TypeDef SPI_FLAG); 315 | void SPI_ClearFlag(SPI_Flag_TypeDef SPI_FLAG); 316 | ITStatus SPI_GetITStatus(SPI_IT_TypeDef SPI_IT); 317 | void SPI_ClearITPendingBit(SPI_IT_TypeDef SPI_IT); 318 | 319 | /** 320 | * @} 321 | */ 322 | 323 | #endif /* __STM8S_SPI_H */ 324 | 325 | /** 326 | * @} 327 | */ 328 | 329 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 330 | -------------------------------------------------------------------------------- /mcu/std_lib/inc/stm8s_tim3.h: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm8s_tim3.h 4 | * @author MCD Application Team 5 | * @version V2.1.0 6 | * @date 18-November-2011 7 | * @brief This file contains all functions prototype and macros for the TIM3 peripheral. 8 | ****************************************************************************** 9 | * @attention 10 | * 11 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 12 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 13 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 14 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 15 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 16 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 17 | * 18 | *

© COPYRIGHT 2011 STMicroelectronics

19 | ****************************************************************************** 20 | */ 21 | 22 | /* Define to prevent recursive inclusion -------------------------------------*/ 23 | #ifndef __STM8S_TIM3_H 24 | #define __STM8S_TIM3_H 25 | 26 | /* Includes ------------------------------------------------------------------*/ 27 | #include "stm8s.h" 28 | 29 | /** @addtogroup STM8S_StdPeriph_Driver 30 | * @{ 31 | */ 32 | 33 | /* Exported types ------------------------------------------------------------*/ 34 | 35 | /** @addtogroup TIM3_Exported_Types 36 | * @{ 37 | */ 38 | 39 | /** TIM3 Forced Action */ 40 | typedef enum 41 | { 42 | TIM3_FORCEDACTION_ACTIVE = ((uint8_t)0x50), 43 | TIM3_FORCEDACTION_INACTIVE = ((uint8_t)0x40) 44 | } TIM3_ForcedAction_TypeDef; 45 | 46 | #define IS_TIM3_FORCED_ACTION_OK(ACTION) (((ACTION) == TIM3_FORCEDACTION_ACTIVE) || \ 47 | ((ACTION) == TIM3_FORCEDACTION_INACTIVE)) 48 | 49 | /** TIM3 Prescaler */ 50 | typedef enum 51 | { 52 | TIM3_PRESCALER_1 = ((uint8_t)0x00), 53 | TIM3_PRESCALER_2 = ((uint8_t)0x01), 54 | TIM3_PRESCALER_4 = ((uint8_t)0x02), 55 | TIM3_PRESCALER_8 = ((uint8_t)0x03), 56 | TIM3_PRESCALER_16 = ((uint8_t)0x04), 57 | TIM3_PRESCALER_32 = ((uint8_t)0x05), 58 | TIM3_PRESCALER_64 = ((uint8_t)0x06), 59 | TIM3_PRESCALER_128 = ((uint8_t)0x07), 60 | TIM3_PRESCALER_256 = ((uint8_t)0x08), 61 | TIM3_PRESCALER_512 = ((uint8_t)0x09), 62 | TIM3_PRESCALER_1024 = ((uint8_t)0x0A), 63 | TIM3_PRESCALER_2048 = ((uint8_t)0x0B), 64 | TIM3_PRESCALER_4096 = ((uint8_t)0x0C), 65 | TIM3_PRESCALER_8192 = ((uint8_t)0x0D), 66 | TIM3_PRESCALER_16384 = ((uint8_t)0x0E), 67 | TIM3_PRESCALER_32768 = ((uint8_t)0x0F) 68 | } TIM3_Prescaler_TypeDef; 69 | 70 | #define IS_TIM3_PRESCALER_OK(PRESCALER) (((PRESCALER) == TIM3_PRESCALER_1 ) || \ 71 | ((PRESCALER) == TIM3_PRESCALER_2 ) || \ 72 | ((PRESCALER) == TIM3_PRESCALER_4 ) || \ 73 | ((PRESCALER) == TIM3_PRESCALER_8 ) || \ 74 | ((PRESCALER) == TIM3_PRESCALER_16 ) || \ 75 | ((PRESCALER) == TIM3_PRESCALER_32 ) || \ 76 | ((PRESCALER) == TIM3_PRESCALER_64 ) || \ 77 | ((PRESCALER) == TIM3_PRESCALER_128 ) || \ 78 | ((PRESCALER) == TIM3_PRESCALER_256 ) || \ 79 | ((PRESCALER) == TIM3_PRESCALER_512 ) || \ 80 | ((PRESCALER) == TIM3_PRESCALER_1024 ) || \ 81 | ((PRESCALER) == TIM3_PRESCALER_2048 ) || \ 82 | ((PRESCALER) == TIM3_PRESCALER_4096 ) || \ 83 | ((PRESCALER) == TIM3_PRESCALER_8192 ) || \ 84 | ((PRESCALER) == TIM3_PRESCALER_16384 ) || \ 85 | ((PRESCALER) == TIM3_PRESCALER_32768 )) 86 | 87 | /** TIM3 Output Compare and PWM modes */ 88 | typedef enum 89 | { 90 | TIM3_OCMODE_TIMING = ((uint8_t)0x00), 91 | TIM3_OCMODE_ACTIVE = ((uint8_t)0x10), 92 | TIM3_OCMODE_INACTIVE = ((uint8_t)0x20), 93 | TIM3_OCMODE_TOGGLE = ((uint8_t)0x30), 94 | TIM3_OCMODE_PWM1 = ((uint8_t)0x60), 95 | TIM3_OCMODE_PWM2 = ((uint8_t)0x70) 96 | } TIM3_OCMode_TypeDef; 97 | 98 | #define IS_TIM3_OC_MODE_OK(MODE) (((MODE) == TIM3_OCMODE_TIMING) || \ 99 | ((MODE) == TIM3_OCMODE_ACTIVE) || \ 100 | ((MODE) == TIM3_OCMODE_INACTIVE) || \ 101 | ((MODE) == TIM3_OCMODE_TOGGLE)|| \ 102 | ((MODE) == TIM3_OCMODE_PWM1) || \ 103 | ((MODE) == TIM3_OCMODE_PWM2)) 104 | 105 | #define IS_TIM3_OCM_OK(MODE)(((MODE) == TIM3_OCMODE_TIMING) || \ 106 | ((MODE) == TIM3_OCMODE_ACTIVE) || \ 107 | ((MODE) == TIM3_OCMODE_INACTIVE) || \ 108 | ((MODE) == TIM3_OCMODE_TOGGLE)|| \ 109 | ((MODE) == TIM3_OCMODE_PWM1) || \ 110 | ((MODE) == TIM3_OCMODE_PWM2) || \ 111 | ((MODE) == (uint8_t)TIM3_FORCEDACTION_ACTIVE) || \ 112 | ((MODE) == (uint8_t)TIM3_FORCEDACTION_INACTIVE)) 113 | 114 | /** TIM3 One Pulse Mode */ 115 | typedef enum 116 | { 117 | TIM3_OPMODE_SINGLE = ((uint8_t)0x01), 118 | TIM3_OPMODE_REPETITIVE = ((uint8_t)0x00) 119 | } TIM3_OPMode_TypeDef; 120 | 121 | #define IS_TIM3_OPM_MODE_OK(MODE) (((MODE) == TIM3_OPMODE_SINGLE) || \ 122 | ((MODE) == TIM3_OPMODE_REPETITIVE)) 123 | 124 | /** TIM3 Channel */ 125 | 126 | typedef enum 127 | { 128 | TIM3_CHANNEL_1 = ((uint8_t)0x00), 129 | TIM3_CHANNEL_2 = ((uint8_t)0x01) 130 | } TIM3_Channel_TypeDef; 131 | 132 | #define IS_TIM3_CHANNEL_OK(CHANNEL) (((CHANNEL) == TIM3_CHANNEL_1) || \ 133 | ((CHANNEL) == TIM3_CHANNEL_2)) 134 | 135 | #define IS_TIM3_PWMI_CHANNEL_OK(CHANNEL) (((CHANNEL) == TIM3_CHANNEL_1) || \ 136 | ((CHANNEL) == TIM3_CHANNEL_2)) 137 | 138 | /** TIM3 Output Compare Polarity */ 139 | typedef enum 140 | { 141 | TIM3_OCPOLARITY_HIGH = ((uint8_t)0x00), 142 | TIM3_OCPOLARITY_LOW = ((uint8_t)0x22) 143 | } TIM3_OCPolarity_TypeDef; 144 | 145 | #define IS_TIM3_OC_POLARITY_OK(POLARITY) (((POLARITY) == TIM3_OCPOLARITY_HIGH) || \ 146 | ((POLARITY) == TIM3_OCPOLARITY_LOW)) 147 | 148 | /** TIM3 Output Compare states */ 149 | typedef enum 150 | { 151 | TIM3_OUTPUTSTATE_DISABLE = ((uint8_t)0x00), 152 | TIM3_OUTPUTSTATE_ENABLE = ((uint8_t)0x11) 153 | } TIM3_OutputState_TypeDef; 154 | 155 | #define IS_TIM3_OUTPUT_STATE_OK(STATE) (((STATE) == TIM3_OUTPUTSTATE_DISABLE) || \ 156 | ((STATE) == TIM3_OUTPUTSTATE_ENABLE)) 157 | 158 | /** TIM3 Input Capture Polarity */ 159 | typedef enum 160 | { 161 | TIM3_ICPOLARITY_RISING = ((uint8_t)0x00), 162 | TIM3_ICPOLARITY_FALLING = ((uint8_t)0x44) 163 | } TIM3_ICPolarity_TypeDef; 164 | 165 | #define IS_TIM3_IC_POLARITY_OK(POLARITY) (((POLARITY) == TIM3_ICPOLARITY_RISING) || \ 166 | ((POLARITY) == TIM3_ICPOLARITY_FALLING)) 167 | 168 | /** TIM3 Input Capture Selection */ 169 | typedef enum 170 | { 171 | TIM3_ICSELECTION_DIRECTTI = ((uint8_t)0x01), 172 | TIM3_ICSELECTION_INDIRECTTI = ((uint8_t)0x02), 173 | TIM3_ICSELECTION_TRGI = ((uint8_t)0x03) 174 | } TIM3_ICSelection_TypeDef; 175 | 176 | #define IS_TIM3_IC_SELECTION_OK(SELECTION) (((SELECTION) == TIM3_ICSELECTION_DIRECTTI) || \ 177 | ((SELECTION) == TIM3_ICSELECTION_INDIRECTTI) || \ 178 | ((SELECTION) == TIM3_ICSELECTION_TRGI)) 179 | 180 | /** TIM3 Input Capture Prescaler */ 181 | typedef enum 182 | { 183 | TIM3_ICPSC_DIV1 = ((uint8_t)0x00), 184 | TIM3_ICPSC_DIV2 = ((uint8_t)0x04), 185 | TIM3_ICPSC_DIV4 = ((uint8_t)0x08), 186 | TIM3_ICPSC_DIV8 = ((uint8_t)0x0C) 187 | } TIM3_ICPSC_TypeDef; 188 | 189 | #define IS_TIM3_IC_PRESCALER_OK(PRESCALER) (((PRESCALER) == TIM3_ICPSC_DIV1) || \ 190 | ((PRESCALER) == TIM3_ICPSC_DIV2) || \ 191 | ((PRESCALER) == TIM3_ICPSC_DIV4) || \ 192 | ((PRESCALER) == TIM3_ICPSC_DIV8)) 193 | 194 | /** TIM3 Input Capture Filer Value */ 195 | #define IS_TIM3_IC_FILTER_OK(ICFILTER) ((ICFILTER) <= 0x0F) 196 | 197 | /** TIM3 interrupt sources */ 198 | typedef enum 199 | { 200 | TIM3_IT_UPDATE = ((uint8_t)0x01), 201 | TIM3_IT_CC1 = ((uint8_t)0x02), 202 | TIM3_IT_CC2 = ((uint8_t)0x04) 203 | } TIM3_IT_TypeDef; 204 | 205 | #define IS_TIM3_IT_OK(IT) (((IT) != 0x00) && ((IT) <= 0x07)) 206 | 207 | #define IS_TIM3_GET_IT_OK(IT) (((IT) == TIM3_IT_UPDATE) || \ 208 | ((IT) == TIM3_IT_CC1) || \ 209 | ((IT) == TIM3_IT_CC2)) 210 | 211 | /** TIM3 Prescaler Reload Mode */ 212 | typedef enum 213 | { 214 | TIM3_PSCRELOADMODE_UPDATE = ((uint8_t)0x00), 215 | TIM3_PSCRELOADMODE_IMMEDIATE = ((uint8_t)0x01) 216 | } TIM3_PSCReloadMode_TypeDef; 217 | 218 | #define IS_TIM3_PRESCALER_RELOAD_OK(RELOAD) (((RELOAD) == TIM3_PSCRELOADMODE_UPDATE) || \ 219 | ((RELOAD) == TIM3_PSCRELOADMODE_IMMEDIATE)) 220 | 221 | /** TIM3 Event Source */ 222 | typedef enum 223 | { 224 | TIM3_EVENTSOURCE_UPDATE = ((uint8_t)0x01), 225 | TIM3_EVENTSOURCE_CC1 = ((uint8_t)0x02), 226 | TIM3_EVENTSOURCE_CC2 = ((uint8_t)0x04) 227 | } TIM3_EventSource_TypeDef; 228 | 229 | #define IS_TIM3_EVENT_SOURCE_OK(SOURCE) (((SOURCE) != 0x00)) 230 | 231 | /** TIM3 Update Source */ 232 | typedef enum 233 | { 234 | TIM3_UPDATESOURCE_GLOBAL = ((uint8_t)0x00), 235 | TIM3_UPDATESOURCE_REGULAR = ((uint8_t)0x01) 236 | } TIM3_UpdateSource_TypeDef; 237 | 238 | #define IS_TIM3_UPDATE_SOURCE_OK(SOURCE) (((SOURCE) == TIM3_UPDATESOURCE_GLOBAL) || \ 239 | ((SOURCE) == TIM3_UPDATESOURCE_REGULAR)) 240 | 241 | /** TIM3 Flags */ 242 | typedef enum 243 | { 244 | TIM3_FLAG_UPDATE = ((uint16_t)0x0001), 245 | TIM3_FLAG_CC1 = ((uint16_t)0x0002), 246 | TIM3_FLAG_CC2 = ((uint16_t)0x0004), 247 | TIM3_FLAG_CC1OF = ((uint16_t)0x0200), 248 | TIM3_FLAG_CC2OF = ((uint16_t)0x0400) 249 | } TIM3_FLAG_TypeDef; 250 | 251 | #define IS_TIM3_GET_FLAG_OK(FLAG) (((FLAG) == TIM3_FLAG_UPDATE) || \ 252 | ((FLAG) == TIM3_FLAG_CC1) || \ 253 | ((FLAG) == TIM3_FLAG_CC2) || \ 254 | ((FLAG) == TIM3_FLAG_CC1OF) || \ 255 | ((FLAG) == TIM3_FLAG_CC2OF) ) 256 | 257 | #define IS_TIM3_CLEAR_FLAG_OK(FLAG) ((((uint16_t)(FLAG) & 0xF9F8) == 0x0000) && ((uint16_t)(FLAG)!= 0x0000)) 258 | 259 | /** 260 | * @} 261 | */ 262 | 263 | /* Exported macro ------------------------------------------------------------*/ 264 | 265 | /* Exported functions --------------------------------------------------------*/ 266 | 267 | /** @addtogroup TIM3_Exported_Functions 268 | * @{ 269 | */ 270 | 271 | void TIM3_DeInit(void); 272 | void TIM3_TimeBaseInit(TIM3_Prescaler_TypeDef TIM3_Prescaler, uint16_t TIM3_Period); 273 | void TIM3_OC1Init(TIM3_OCMode_TypeDef TIM3_OCMode, TIM3_OutputState_TypeDef TIM3_OutputState, uint16_t TIM3_Pulse, TIM3_OCPolarity_TypeDef TIM3_OCPolarity); 274 | void TIM3_OC2Init(TIM3_OCMode_TypeDef TIM3_OCMode, TIM3_OutputState_TypeDef TIM3_OutputState, uint16_t TIM3_Pulse, TIM3_OCPolarity_TypeDef TIM3_OCPolarity); 275 | void TIM3_ICInit(TIM3_Channel_TypeDef TIM3_Channel, TIM3_ICPolarity_TypeDef TIM3_ICPolarity, TIM3_ICSelection_TypeDef TIM3_ICSelection, TIM3_ICPSC_TypeDef TIM3_ICPrescaler, uint8_t TIM3_ICFilter); 276 | void TIM3_PWMIConfig(TIM3_Channel_TypeDef TIM3_Channel, TIM3_ICPolarity_TypeDef TIM3_ICPolarity, TIM3_ICSelection_TypeDef TIM3_ICSelection, TIM3_ICPSC_TypeDef TIM3_ICPrescaler, uint8_t TIM3_ICFilter); 277 | void TIM3_Cmd(FunctionalState NewState); 278 | void TIM3_ITConfig(TIM3_IT_TypeDef TIM3_IT, FunctionalState NewState); 279 | void TIM3_InternalClockConfig(void); 280 | void TIM3_UpdateDisableConfig(FunctionalState NewState); 281 | void TIM3_UpdateRequestConfig(TIM3_UpdateSource_TypeDef TIM3_UpdateSource); 282 | void TIM3_SelectOnePulseMode(TIM3_OPMode_TypeDef TIM3_OPMode); 283 | void TIM3_PrescalerConfig(TIM3_Prescaler_TypeDef Prescaler, TIM3_PSCReloadMode_TypeDef TIM3_PSCReloadMode); 284 | void TIM3_ForcedOC1Config(TIM3_ForcedAction_TypeDef TIM3_ForcedAction); 285 | void TIM3_ForcedOC2Config(TIM3_ForcedAction_TypeDef TIM3_ForcedAction); 286 | void TIM3_ARRPreloadConfig(FunctionalState NewState); 287 | void TIM3_CCPreloadControl(FunctionalState NewState); 288 | void TIM3_OC1PreloadConfig(FunctionalState NewState); 289 | void TIM3_OC2PreloadConfig(FunctionalState NewState); 290 | void TIM3_GenerateEvent(TIM3_EventSource_TypeDef TIM3_EventSource); 291 | void TIM3_OC1PolarityConfig(TIM3_OCPolarity_TypeDef TIM3_OCPolarity); 292 | void TIM3_OC2PolarityConfig(TIM3_OCPolarity_TypeDef TIM3_OCPolarity); 293 | void TIM3_CCxCmd(TIM3_Channel_TypeDef TIM3_Channel, FunctionalState NewState); 294 | void TIM3_SelectOCxM(TIM3_Channel_TypeDef TIM3_Channel, TIM3_OCMode_TypeDef TIM3_OCMode); 295 | void TIM3_SetCounter(uint16_t Counter); 296 | void TIM3_SetAutoreload(uint16_t Autoreload); 297 | void TIM3_SetCompare1(uint16_t Compare1); 298 | void TIM3_SetCompare2(uint16_t Compare2); 299 | void TIM3_SetIC1Prescaler(TIM3_ICPSC_TypeDef TIM3_IC1Prescaler); 300 | void TIM3_SetIC2Prescaler(TIM3_ICPSC_TypeDef TIM3_IC2Prescaler); 301 | uint16_t TIM3_GetCapture1(void); 302 | uint16_t TIM3_GetCapture2(void); 303 | uint16_t TIM3_GetCounter(void); 304 | TIM3_Prescaler_TypeDef TIM3_GetPrescaler(void); 305 | FlagStatus TIM3_GetFlagStatus(TIM3_FLAG_TypeDef TIM3_FLAG); 306 | void TIM3_ClearFlag(TIM3_FLAG_TypeDef TIM3_FLAG); 307 | ITStatus TIM3_GetITStatus(TIM3_IT_TypeDef TIM3_IT); 308 | void TIM3_ClearITPendingBit(TIM3_IT_TypeDef TIM3_IT); 309 | 310 | /** 311 | * @} 312 | */ 313 | 314 | #endif /* __STM8S_TIM3_H */ 315 | 316 | /** 317 | * @} 318 | */ 319 | 320 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 321 | -------------------------------------------------------------------------------- /mcu/std_lib/inc/stm8s_tim4.h: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm8s_tim4.h 4 | * @author MCD Application Team 5 | * @version V2.1.0 6 | * @date 18-November-2011 7 | * @brief This file contains all functions prototype and macros for the TIM4 peripheral. 8 | ****************************************************************************** 9 | * @attention 10 | * 11 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 12 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 13 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 14 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 15 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 16 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 17 | * 18 | *

© COPYRIGHT 2011 STMicroelectronics

19 | ****************************************************************************** 20 | */ 21 | 22 | /* Define to prevent recursive inclusion -------------------------------------*/ 23 | #ifndef __STM8S_TIM4_H 24 | #define __STM8S_TIM4_H 25 | 26 | /* Includes ------------------------------------------------------------------*/ 27 | #include "stm8s.h" 28 | 29 | /** @addtogroup STM8S_StdPeriph_Driver 30 | * @{ 31 | */ 32 | 33 | /* Exported types ------------------------------------------------------------*/ 34 | 35 | /** @addtogroup TIM4_Exported_Types 36 | * @{ 37 | */ 38 | 39 | 40 | 41 | /** TIM4 Prescaler */ 42 | typedef enum 43 | { 44 | TIM4_PRESCALER_1 = ((uint8_t)0x00), 45 | TIM4_PRESCALER_2 = ((uint8_t)0x01), 46 | TIM4_PRESCALER_4 = ((uint8_t)0x02), 47 | TIM4_PRESCALER_8 = ((uint8_t)0x03), 48 | TIM4_PRESCALER_16 = ((uint8_t)0x04), 49 | TIM4_PRESCALER_32 = ((uint8_t)0x05), 50 | TIM4_PRESCALER_64 = ((uint8_t)0x06), 51 | TIM4_PRESCALER_128 = ((uint8_t)0x07) 52 | } TIM4_Prescaler_TypeDef; 53 | 54 | #define IS_TIM4_PRESCALER_OK(PRESCALER) (((PRESCALER) == TIM4_PRESCALER_1 ) || \ 55 | ((PRESCALER) == TIM4_PRESCALER_2 ) || \ 56 | ((PRESCALER) == TIM4_PRESCALER_4 ) || \ 57 | ((PRESCALER) == TIM4_PRESCALER_8 ) || \ 58 | ((PRESCALER) == TIM4_PRESCALER_16 ) || \ 59 | ((PRESCALER) == TIM4_PRESCALER_32 ) || \ 60 | ((PRESCALER) == TIM4_PRESCALER_64 ) || \ 61 | ((PRESCALER) == TIM4_PRESCALER_128 ) ) 62 | 63 | /** TIM4 One Pulse Mode */ 64 | typedef enum 65 | { 66 | TIM4_OPMODE_SINGLE = ((uint8_t)0x01), 67 | TIM4_OPMODE_REPETITIVE = ((uint8_t)0x00) 68 | } TIM4_OPMode_TypeDef; 69 | 70 | #define IS_TIM4_OPM_MODE_OK(MODE) (((MODE) == TIM4_OPMODE_SINGLE) || \ 71 | ((MODE) == TIM4_OPMODE_REPETITIVE)) 72 | 73 | /** TIM4 Prescaler Reload Mode */ 74 | typedef enum 75 | { 76 | TIM4_PSCRELOADMODE_UPDATE = ((uint8_t)0x00), 77 | TIM4_PSCRELOADMODE_IMMEDIATE = ((uint8_t)0x01) 78 | } TIM4_PSCReloadMode_TypeDef; 79 | 80 | #define IS_TIM4_PRESCALER_RELOAD_OK(RELOAD) (((RELOAD) == TIM4_PSCRELOADMODE_UPDATE) || \ 81 | ((RELOAD) == TIM4_PSCRELOADMODE_IMMEDIATE)) 82 | 83 | /** TIM4 Update Source */ 84 | typedef enum 85 | { 86 | TIM4_UPDATESOURCE_GLOBAL = ((uint8_t)0x00), 87 | TIM4_UPDATESOURCE_REGULAR = ((uint8_t)0x01) 88 | } TIM4_UpdateSource_TypeDef; 89 | 90 | #define IS_TIM4_UPDATE_SOURCE_OK(SOURCE) (((SOURCE) == TIM4_UPDATESOURCE_GLOBAL) || \ 91 | ((SOURCE) == TIM4_UPDATESOURCE_REGULAR)) 92 | 93 | /** TIM4 Event Source */ 94 | typedef enum 95 | { 96 | TIM4_EVENTSOURCE_UPDATE = ((uint8_t)0x01) 97 | }TIM4_EventSource_TypeDef; 98 | 99 | #define IS_TIM4_EVENT_SOURCE_OK(SOURCE) (((SOURCE) == 0x01)) 100 | 101 | /** TIM4 Flags */ 102 | typedef enum 103 | { 104 | TIM4_FLAG_UPDATE = ((uint8_t)0x01) 105 | }TIM4_FLAG_TypeDef; 106 | 107 | #define IS_TIM4_GET_FLAG_OK(FLAG) ((FLAG) == TIM4_FLAG_UPDATE) 108 | 109 | 110 | 111 | /** TIM4 interrupt sources */ 112 | typedef enum 113 | { 114 | TIM4_IT_UPDATE = ((uint8_t)0x01) 115 | }TIM4_IT_TypeDef; 116 | 117 | #define IS_TIM4_IT_OK(IT) ((IT) == TIM4_IT_UPDATE) 118 | 119 | 120 | 121 | /** 122 | * @} 123 | */ 124 | 125 | /* Exported macro ------------------------------------------------------------*/ 126 | 127 | /* Exported functions --------------------------------------------------------*/ 128 | 129 | /** @addtogroup TIM4_Exported_Functions 130 | * @{ 131 | */ 132 | void TIM4_DeInit(void); 133 | void TIM4_TimeBaseInit(TIM4_Prescaler_TypeDef TIM4_Prescaler, uint8_t TIM4_Period); 134 | void TIM4_Cmd(FunctionalState NewState); 135 | void TIM4_ITConfig(TIM4_IT_TypeDef TIM4_IT, FunctionalState NewState); 136 | void TIM4_UpdateDisableConfig(FunctionalState NewState); 137 | void TIM4_UpdateRequestConfig(TIM4_UpdateSource_TypeDef TIM4_UpdateSource); 138 | void TIM4_SelectOnePulseMode(TIM4_OPMode_TypeDef TIM4_OPMode); 139 | void TIM4_PrescalerConfig(TIM4_Prescaler_TypeDef Prescaler, TIM4_PSCReloadMode_TypeDef TIM4_PSCReloadMode); 140 | void TIM4_ARRPreloadConfig(FunctionalState NewState); 141 | void TIM4_GenerateEvent(TIM4_EventSource_TypeDef TIM4_EventSource); 142 | void TIM4_SetCounter(uint8_t Counter); 143 | void TIM4_SetAutoreload(uint8_t Autoreload); 144 | uint8_t TIM4_GetCounter(void); 145 | TIM4_Prescaler_TypeDef TIM4_GetPrescaler(void); 146 | FlagStatus TIM4_GetFlagStatus(TIM4_FLAG_TypeDef TIM4_FLAG); 147 | void TIM4_ClearFlag(TIM4_FLAG_TypeDef TIM4_FLAG); 148 | ITStatus TIM4_GetITStatus(TIM4_IT_TypeDef TIM4_IT); 149 | void TIM4_ClearITPendingBit(TIM4_IT_TypeDef TIM4_IT); 150 | 151 | 152 | /** 153 | * @} 154 | */ 155 | 156 | #endif /* __STM8S_TIM4_H */ 157 | 158 | /** 159 | * @} 160 | */ 161 | 162 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 163 | -------------------------------------------------------------------------------- /mcu/std_lib/inc/stm8s_tim6.h: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm8s_tim6.h 4 | * @author MCD Application Team 5 | * @version V2.1.0 6 | * @date 18-November-2011 7 | * @brief This file contains all functions prototype and macros for the TIM6 peripheral. 8 | ****************************************************************************** 9 | * @attention 10 | * 11 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 12 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 13 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 14 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 15 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 16 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 17 | * 18 | *

© COPYRIGHT 2011 STMicroelectronics

19 | ****************************************************************************** 20 | */ 21 | 22 | /* Define to prevent recursive inclusion -------------------------------------*/ 23 | #ifndef __STM8S_TIM6_H 24 | #define __STM8S_TIM6_H 25 | 26 | /* Includes ------------------------------------------------------------------*/ 27 | #include "stm8s.h" 28 | 29 | /** @addtogroup STM8S_StdPeriph_Driver 30 | * @{ 31 | */ 32 | 33 | /* Exported variables ------------------------------------------------------- */ 34 | /* Exported types ------------------------------------------------------------*/ 35 | 36 | /** @addtogroup TIM6_Exported_Types 37 | * @{ 38 | */ 39 | 40 | 41 | /** 42 | * @brief TIM6 Prescaler 43 | */ 44 | typedef enum 45 | { 46 | TIM6_PRESCALER_1 = ((uint8_t)0x00), /*!< Time base Prescaler = 1 (No effect)*/ 47 | TIM6_PRESCALER_2 = ((uint8_t)0x01), /*!< Time base Prescaler = 2 */ 48 | TIM6_PRESCALER_4 = ((uint8_t)0x02), /*!< Time base Prescaler = 4 */ 49 | TIM6_PRESCALER_8 = ((uint8_t)0x03), /*!< Time base Prescaler = 8 */ 50 | TIM6_PRESCALER_16 = ((uint8_t)0x04), /*!< Time base Prescaler = 16 */ 51 | TIM6_PRESCALER_32 = ((uint8_t)0x05), /*!< Time base Prescaler = 32 */ 52 | TIM6_PRESCALER_64 = ((uint8_t)0x06), /*!< Time base Prescaler = 64 */ 53 | TIM6_PRESCALER_128 = ((uint8_t)0x07) /*!< Time base Prescaler = 128 */ 54 | }TIM6_Prescaler_TypeDef; 55 | 56 | /** 57 | * @brief TIM6 One Pulse Mode 58 | */ 59 | typedef enum 60 | { 61 | TIM6_OPMODE_SINGLE = ((uint8_t)0x01), /*!< Single one Pulse mode (OPM Active) */ 62 | TIM6_OPMODE_REPETITIVE = ((uint8_t)0x00) /*!< Repetitive Pulse mode (OPM inactive) */ 63 | }TIM6_OPMode_TypeDef; 64 | 65 | /** 66 | * @brief TIM6 Prescaler Reload Mode 67 | */ 68 | typedef enum 69 | { 70 | TIM6_PSCRELOADMODE_UPDATE =((uint8_t)0x00), /*!< Prescaler value is reloaded at every update*/ 71 | TIM6_PSCRELOADMODE_IMMEDIATE =((uint8_t)0x01) /*!< Prescaler value is reloaded immediatly*/ 72 | }TIM6_PSCReloadMode_TypeDef; 73 | 74 | /** 75 | * @brief TIM6 Update Source 76 | */ 77 | typedef enum 78 | { 79 | TIM6_UPDATESOURCE_GLOBAL =((uint8_t)0x00), /*!< Global Update request source */ 80 | TIM6_UPDATESOURCE_REGULAR =((uint8_t)0x01) /*!< Regular Update request source */ 81 | }TIM6_UpdateSource_TypeDef; 82 | 83 | /** 84 | * @brief TIM6 Event Source 85 | */ 86 | typedef enum 87 | { 88 | TIM6_EVENTSOURCE_UPDATE = ((uint8_t)0x01), /*!< Update Event*/ 89 | TIM6_EVENTSOURCE_TRIGGER = ((uint8_t)0x40) /*!< Trigger Event*/ 90 | }TIM6_EventSource_TypeDef; 91 | 92 | /** 93 | * @brief TIM6 Trigger Output Source 94 | */ 95 | typedef enum 96 | { 97 | TIM6_TRGOSOURCE_RESET = ((uint8_t)0x00), /*!< Trigger Output source = Reset*/ 98 | TIM6_TRGOSOURCE_ENABLE = ((uint8_t)0x10), /*!< Trigger Output source = TIM5 is enabled*/ 99 | TIM6_TRGOSOURCE_UPDATE = ((uint8_t)0x20) /*!< Trigger Output source = Update event*/ 100 | }TIM6_TRGOSource_TypeDef; 101 | 102 | /** 103 | * @brief TIM6 Slave Mode 104 | */ 105 | typedef enum 106 | { 107 | TIM6_SLAVEMODE_DISABLE = ((uint8_t)0x00), /*!< Disable slave mode to clock the prescaler directly with the internal clock */ 108 | TIM6_SLAVEMODE_RESET = ((uint8_t)0x04), /*!< Slave Mode Selection = Reset*/ 109 | TIM6_SLAVEMODE_GATED = ((uint8_t)0x05), /*!< Slave Mode Selection = Gated*/ 110 | TIM6_SLAVEMODE_TRIGGER = ((uint8_t)0x06), /*!< Slave Mode Selection = Trigger*/ 111 | TIM6_SLAVEMODE_EXTERNAL1 = ((uint8_t)0x07) /*!< Slave Mode Selection = External 1*/ 112 | }TIM6_SlaveMode_TypeDef; 113 | 114 | /** 115 | * @brief TIM6 Flags 116 | */ 117 | typedef enum 118 | { 119 | TIM6_FLAG_UPDATE = ((uint8_t)0x01), /*!< Update Flag */ 120 | TIM6_FLAG_TRIGGER = ((uint8_t)0x40) /*!< Trigger Flag */ 121 | }TIM6_FLAG_TypeDef; 122 | 123 | /** 124 | * @brief TIM6 interrupt sources 125 | */ 126 | typedef enum 127 | { 128 | TIM6_IT_UPDATE = ((uint8_t)0x01), /*!< Update Interrupt*/ 129 | TIM6_IT_TRIGGER = ((uint8_t)0x40) /*!< Trigger Interrupt*/ 130 | }TIM6_IT_TypeDef; 131 | 132 | /** 133 | * @brief TIM6 Internal Trigger Selection 134 | */ 135 | typedef enum 136 | { 137 | TIM6_TS_TIM1 = ((uint8_t)0x20),/*!< TRIG Input source = TIM1 TRIG Output */ 138 | TIM6_TS_TIM5 = ((uint8_t)0x30) /*!< TRIG Input source = TIM5 TRIG Output */ 139 | }TIM6_TS_TypeDef; 140 | 141 | /** 142 | * @} 143 | */ 144 | 145 | /* Exported constants --------------------------------------------------------*/ 146 | /* Exported macros -----------------------------------------------------------*/ 147 | /* Private macros ------------------------------------------------------------*/ 148 | 149 | /** @addtogroup TIM6_Private_Macros 150 | * @{ 151 | */ 152 | 153 | /** 154 | * @brief Macro used by the assert function to check the different functions parameters. 155 | */ 156 | 157 | /** 158 | * @brief Macro TIM6 Prescaler 159 | */ 160 | #define IS_TIM6_PRESCALER_OK(PRESCALER) \ 161 | (((PRESCALER) == TIM6_PRESCALER_1) || \ 162 | ((PRESCALER) == TIM6_PRESCALER_2) || \ 163 | ((PRESCALER) == TIM6_PRESCALER_4) || \ 164 | ((PRESCALER) == TIM6_PRESCALER_8) || \ 165 | ((PRESCALER) == TIM6_PRESCALER_16) || \ 166 | ((PRESCALER) == TIM6_PRESCALER_32) || \ 167 | ((PRESCALER) == TIM6_PRESCALER_64) || \ 168 | ((PRESCALER) == TIM6_PRESCALER_128)) 169 | /** 170 | * @brief Macro TIM6 One Pulse Mode 171 | */ 172 | #define IS_TIM6_OPM_MODE_OK(MODE) \ 173 | (((MODE) == TIM6_OPMODE_SINGLE) || \ 174 | ((MODE) == TIM6_OPMODE_REPETITIVE)) 175 | 176 | /** 177 | * @brief Macro TIM6 Prescaler reload 178 | */ 179 | #define IS_TIM6_PRESCALER_RELOAD_OK(RELOAD) \ 180 | (((RELOAD) == TIM6_PSCRELOADMODE_UPDATE) || \ 181 | ((RELOAD) == TIM6_PSCRELOADMODE_IMMEDIATE)) 182 | /** 183 | * @brief Macro TIM6 Update source 184 | */ 185 | #define IS_TIM6_UPDATE_SOURCE_OK(SOURCE) \ 186 | (((SOURCE) == TIM6_UPDATESOURCE_GLOBAL) || \ 187 | ((SOURCE) == TIM6_UPDATESOURCE_REGULAR)) 188 | /** 189 | * @brief Macro TIM6 Event source 190 | */ 191 | #define IS_TIM6_EVENT_SOURCE_OK(SOURCE) \ 192 | ((((SOURCE) & (uint8_t)0xBE) == 0x00) && \ 193 | ((SOURCE) != 0x00)) 194 | 195 | /** 196 | * @brief Macro TIM6 TRGO source 197 | */ 198 | #define IS_TIM6_TRGO_SOURCE_OK(SOURCE) \ 199 | (((SOURCE) == TIM6_TRGOSOURCE_RESET) || \ 200 | ((SOURCE) == TIM6_TRGOSOURCE_ENABLE)|| \ 201 | ((SOURCE) == TIM6_TRGOSOURCE_UPDATE)) 202 | /** 203 | * @brief Macro TIM6 Slave mode 204 | */ 205 | #define IS_TIM6_SLAVE_MODE_OK(MODE) \ 206 | (((MODE) == TIM6_SLAVEMODE_DISABLE) || \ 207 | ((MODE) == TIM6_SLAVEMODE_RESET) || \ 208 | ((MODE) == TIM6_SLAVEMODE_GATED) || \ 209 | ((MODE) == TIM6_SLAVEMODE_TRIGGER) || \ 210 | ((MODE) == TIM6_SLAVEMODE_EXTERNAL1)) 211 | /** 212 | * @brief Macro TIM6 Flags 213 | */ 214 | #define IS_TIM6_GET_FLAG_OK(FLAG) \ 215 | (((FLAG) == TIM6_FLAG_UPDATE) || \ 216 | ((FLAG) == TIM6_FLAG_TRIGGER)) 217 | 218 | #define IS_TIM6_CLEAR_FLAG_OK(FLAG) \ 219 | ((((FLAG) & (uint8_t)0xBE) == 0x00) && ((FLAG) != 0x00)) 220 | /** 221 | * @brief Macro TIM6 interrupts 222 | */ 223 | #define IS_TIM6_IT_OK(IT) \ 224 | (((IT) != 0x00) && \ 225 | (((IT) & (uint8_t)(~(uint8_t)(0x41)))== 0x00)) 226 | 227 | #define IS_TIM6_GET_IT_OK(IT) \ 228 | (((IT) == TIM6_IT_UPDATE) || \ 229 | ((IT) == TIM6_IT_TRIGGER)) 230 | /** 231 | * @brief Macro TIM6 Trigger selection 232 | */ 233 | #define IS_TIM6_TRIGGER_SELECTION_OK(SELECTION) \ 234 | (((SELECTION) == TIM6_TS_TIM5) || \ 235 | ((SELECTION) == TIM6_TS_TIM1)) 236 | /** 237 | * @} 238 | */ 239 | 240 | /* Exported functions --------------------------------------------------------*/ 241 | 242 | /** @addtogroup TIM6_Exported_Functions 243 | * @{ 244 | */ 245 | 246 | void TIM6_DeInit(void); 247 | void TIM6_TimeBaseInit(TIM6_Prescaler_TypeDef TIM6_Prescaler, uint8_t TIM6_Period); 248 | void TIM6_Cmd(FunctionalState NewState); 249 | void TIM6_UpdateDisableConfig(FunctionalState NewState); 250 | void TIM6_UpdateRequestConfig(TIM6_UpdateSource_TypeDef TIM6_UpdateSource); 251 | void TIM6_SelectOnePulseMode(TIM6_OPMode_TypeDef TIM6_OPMode); 252 | void TIM6_PrescalerConfig(TIM6_Prescaler_TypeDef Prescaler, TIM6_PSCReloadMode_TypeDef TIM6_PSCReloadMode); 253 | void TIM6_ARRPreloadConfig(FunctionalState NewState); 254 | void TIM6_SetCounter(uint8_t Counter); 255 | void TIM6_SetAutoreload(uint8_t Autoreload); 256 | uint8_t TIM6_GetCounter(void); 257 | TIM6_Prescaler_TypeDef TIM6_GetPrescaler(void); 258 | void TIM6_ITConfig(TIM6_IT_TypeDef TIM6_IT, FunctionalState NewState); 259 | void TIM6_ClearFlag(TIM6_FLAG_TypeDef TIM6_FLAG); 260 | ITStatus TIM6_GetITStatus(TIM6_IT_TypeDef TIM6_IT); 261 | void TIM6_GenerateEvent(TIM6_EventSource_TypeDef TIM6_EventSource); 262 | FlagStatus TIM6_GetFlagStatus(TIM6_FLAG_TypeDef TIM6_FLAG); 263 | void TIM6_ClearITPendingBit(TIM6_IT_TypeDef TIM6_IT); 264 | void TIM6_SelectOutputTrigger(TIM6_TRGOSource_TypeDef TIM6_TRGOSource); 265 | void TIM6_SelectMasterSlaveMode(FunctionalState NewState); 266 | void TIM6_SelectInputTrigger(TIM6_TS_TypeDef TIM6_InputTriggerSource); 267 | void TIM6_InternalClockConfig(void); 268 | void TIM6_SelectSlaveMode(TIM6_SlaveMode_TypeDef TIM6_SlaveMode); 269 | 270 | /** 271 | * @} 272 | */ 273 | 274 | #endif /* __STM8S_TIM6_H */ 275 | 276 | /** 277 | * @} 278 | */ 279 | 280 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 281 | -------------------------------------------------------------------------------- /mcu/std_lib/inc/stm8s_wwdg.h: -------------------------------------------------------------------------------- 1 | /** 2 | ******************************************************************************** 3 | * @file stm8s_wwdg.h 4 | * @author MCD Application Team 5 | * @version V2.1.0 6 | * @date 18-November-2011 7 | * @brief This file contains all functions prototype and macros for the WWDG peripheral. 8 | ****************************************************************************** 9 | * @attention 10 | * 11 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 12 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 13 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 14 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 15 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 16 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 17 | * 18 | *

© COPYRIGHT 2011 STMicroelectronics

19 | ****************************************************************************** 20 | */ 21 | 22 | /* Define to prevent recursive inclusion -------------------------------------*/ 23 | #ifndef __STM8S_WWDG_H 24 | #define __STM8S_WWDG_H 25 | 26 | /* Includes ------------------------------------------------------------------*/ 27 | #include "stm8s.h" 28 | 29 | /** @addtogroup STM8S_StdPeriph_Driver 30 | * @{ 31 | */ 32 | 33 | /* Private macros ------------------------------------------------------------*/ 34 | 35 | /** @addtogroup WWDG_Private_Macros 36 | * @{ 37 | */ 38 | 39 | /** 40 | * @brief Macro used by the assert function in order to check the 41 | * values of the window register. 42 | */ 43 | #define IS_WWDG_WINDOWLIMITVALUE_OK(WindowLimitValue) ((WindowLimitValue) <= 0x7F) 44 | 45 | /** 46 | * @brief Macro used by the assert function in order to check the different 47 | * values of the counter register. 48 | */ 49 | #define IS_WWDG_COUNTERVALUE_OK(CounterValue) ((CounterValue) <= 0x7F) 50 | 51 | /** 52 | * @} 53 | */ 54 | 55 | /* Exported types ------------------------------------------------------------*/ 56 | 57 | /* Exported functions ------------------------------------------------------- */ 58 | 59 | /** @addtogroup WWDG_Exported_Functions 60 | * @{ 61 | */ 62 | 63 | void WWDG_Init(uint8_t Counter, uint8_t WindowValue); 64 | void WWDG_SetCounter(uint8_t Counter); 65 | uint8_t WWDG_GetCounter(void); 66 | void WWDG_SWReset(void); 67 | void WWDG_SetWindowValue(uint8_t WindowValue); 68 | 69 | 70 | /** 71 | * @} 72 | */ 73 | 74 | #endif /* __STM8S_WWDG_H */ 75 | 76 | /** 77 | * @} 78 | */ 79 | 80 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 81 | -------------------------------------------------------------------------------- /mcu/std_lib/src/stm8s_awu.c: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm8s_awu.c 4 | * @author MCD Application Team 5 | * @version V2.1.0 6 | * @date 18-November-2011 7 | * @brief This file contains all the functions for the AWU peripheral. 8 | ****************************************************************************** 9 | * @attention 10 | * 11 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 12 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 13 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 14 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 15 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 16 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 17 | * 18 | *

© COPYRIGHT 2011 STMicroelectronics

19 | ****************************************************************************** 20 | */ 21 | 22 | /* Includes ------------------------------------------------------------------*/ 23 | #include "stm8s_awu.h" 24 | 25 | /** @addtogroup STM8S_StdPeriph_Driver 26 | * @{ 27 | */ 28 | /* Private typedef -----------------------------------------------------------*/ 29 | /* Private define ------------------------------------------------------------*/ 30 | /* Private macro -------------------------------------------------------------*/ 31 | /* Private variables ---------------------------------------------------------*/ 32 | /* Private function prototypes -----------------------------------------------*/ 33 | /* Private functions ---------------------------------------------------------*/ 34 | 35 | /* See also AWU_Timebase_TypeDef structure in stm8s_awu.h file : 36 | N 2 5 1 2 4 8 1 3 6 1 2 5 1 2 1 3 37 | O 5 0 m m m m 6 2 4 2 5 1 s s 2 0 38 | I 0 0 s s s s m m m 8 6 2 s s 39 | T u u s s s m m m 40 | s s s s s 41 | */ 42 | /** Contains the different values to write in the APR register (used by AWU_Init function) */ 43 | CONST uint8_t APR_Array[17] = 44 | { 45 | 0, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 61, 23, 23, 62 46 | }; 47 | 48 | /** Contains the different values to write in the TBR register (used by AWU_Init function) */ 49 | CONST uint8_t TBR_Array[17] = 50 | { 51 | 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 12, 14, 15, 15 52 | }; 53 | 54 | /* Public functions ----------------------------------------------------------*/ 55 | 56 | /** 57 | * @addtogroup AWU_Public_Functions 58 | * @{ 59 | */ 60 | 61 | /** 62 | * @brief Deinitializes the AWU peripheral registers to their default reset 63 | * values. 64 | * @param None 65 | * @retval None 66 | */ 67 | void AWU_DeInit(void) 68 | { 69 | AWU->CSR = AWU_CSR_RESET_VALUE; 70 | AWU->APR = AWU_APR_RESET_VALUE; 71 | AWU->TBR = AWU_TBR_RESET_VALUE; 72 | } 73 | 74 | /** 75 | * @brief Initializes the AWU peripheral according to the specified parameters. 76 | * @param AWU_TimeBase : Time base selection (interval between AWU interrupts). 77 | * can be one of the values of @ref AWU_Timebase_TypeDef. 78 | * @retval None 79 | * @par Required preconditions: 80 | * The LS RC calibration must be performed before calling this function. 81 | */ 82 | void AWU_Init(AWU_Timebase_TypeDef AWU_TimeBase) 83 | { 84 | 85 | /* Check parameter */ 86 | assert_param(IS_AWU_TIMEBASE_OK(AWU_TimeBase)); 87 | 88 | /* Enable the AWU peripheral */ 89 | AWU->CSR |= AWU_CSR_AWUEN; 90 | 91 | /* Set the TimeBase */ 92 | AWU->TBR &= (uint8_t)(~AWU_TBR_AWUTB); 93 | AWU->TBR |= TBR_Array[(uint8_t)AWU_TimeBase]; 94 | 95 | /* Set the APR divider */ 96 | AWU->APR &= (uint8_t)(~AWU_APR_APR); 97 | AWU->APR |= APR_Array[(uint8_t)AWU_TimeBase]; 98 | 99 | } 100 | 101 | /** 102 | * @brief Enable or disable the AWU peripheral. 103 | * @param NewState Indicates the new state of the AWU peripheral. 104 | * @retval None 105 | * @par Required preconditions: 106 | * Initialisation of AWU and LS RC calibration must be done before. 107 | */ 108 | void AWU_Cmd(FunctionalState NewState) 109 | { 110 | if (NewState != DISABLE) 111 | { 112 | /* Enable the AWU peripheral */ 113 | AWU->CSR |= AWU_CSR_AWUEN; 114 | } 115 | else 116 | { 117 | /* Disable the AWU peripheral */ 118 | AWU->CSR &= (uint8_t)(~AWU_CSR_AWUEN); 119 | } 120 | } 121 | 122 | /** 123 | * @brief Update APR register with the measured LSI frequency. 124 | * @par Note on the APR calculation: 125 | * A is the integer part of lsifreqkhz/4 and x the decimal part. 126 | * x <= A/(1+2A) is equivalent to A >= x(1+2A) and also to 4A >= 4x(1+2A) [F1] 127 | * but we know that A + x = lsifreqkhz/4 ==> 4x = lsifreqkhz-4A 128 | * so [F1] can be written : 129 | * 4A >= (lsifreqkhz-4A)(1+2A) 130 | * @param LSIFreqHz Low Speed RC frequency measured by timer (in Hz). 131 | * @retval None 132 | * @par Required preconditions: 133 | * - AWU must be disabled to avoid unwanted interrupts. 134 | */ 135 | void AWU_LSICalibrationConfig(uint32_t LSIFreqHz) 136 | { 137 | 138 | uint16_t lsifreqkhz = 0x0; 139 | uint16_t A = 0x0; 140 | 141 | /* Check parameter */ 142 | assert_param(IS_LSI_FREQUENCY_OK(LSIFreqHz)); 143 | 144 | lsifreqkhz = (uint16_t)(LSIFreqHz / 1000); /* Converts value in kHz */ 145 | 146 | /* Calculation of AWU calibration value */ 147 | 148 | A = (uint16_t)(lsifreqkhz >> 2U); /* Division by 4, keep integer part only */ 149 | 150 | if ((4U * A) >= ((lsifreqkhz - (4U * A)) * (1U + (2U * A)))) 151 | { 152 | AWU->APR = (uint8_t)(A - 2U); 153 | } 154 | else 155 | { 156 | AWU->APR = (uint8_t)(A - 1U); 157 | } 158 | } 159 | 160 | /** 161 | * @brief Configures AWU in Idle mode to reduce power consumption. 162 | * @param None 163 | * @retval None 164 | */ 165 | void AWU_IdleModeEnable(void) 166 | { 167 | /* Disable AWU peripheral */ 168 | AWU->CSR &= (uint8_t)(~AWU_CSR_AWUEN); 169 | 170 | /* No AWU timebase */ 171 | AWU->TBR = (uint8_t)(~AWU_TBR_AWUTB); 172 | } 173 | 174 | /** 175 | * @brief Returns status of the AWU peripheral flag. 176 | * @param None 177 | * @retval FlagStatus : Status of the AWU flag. 178 | * This parameter can be any of the @ref FlagStatus enumeration. 179 | */ 180 | FlagStatus AWU_GetFlagStatus(void) 181 | { 182 | return((FlagStatus)(((uint8_t)(AWU->CSR & AWU_CSR_AWUF) == (uint8_t)0x00) ? RESET : SET)); 183 | } 184 | 185 | 186 | /** 187 | * @} 188 | */ 189 | 190 | /** 191 | * @} 192 | */ 193 | 194 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 195 | -------------------------------------------------------------------------------- /mcu/std_lib/src/stm8s_beep.c: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm8s_beep.c 4 | * @author MCD Application Team 5 | * @version V2.1.0 6 | * @date 18-November-2011 7 | * @brief This file contains all the functions for the BEEP peripheral. 8 | ****************************************************************************** 9 | * @attention 10 | * 11 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 12 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 13 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 14 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 15 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 16 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 17 | * 18 | *

© COPYRIGHT 2011 STMicroelectronics

19 | ****************************************************************************** 20 | */ 21 | 22 | /* Includes ------------------------------------------------------------------*/ 23 | #include "stm8s_beep.h" 24 | 25 | /** @addtogroup STM8S_StdPeriph_Driver 26 | * @{ 27 | */ 28 | /* Private typedef -----------------------------------------------------------*/ 29 | /* Private define ------------------------------------------------------------*/ 30 | /* Private macro -------------------------------------------------------------*/ 31 | /* Private variables ---------------------------------------------------------*/ 32 | /* Private function prototypes -----------------------------------------------*/ 33 | /* Private functions ---------------------------------------------------------*/ 34 | 35 | /* Public functions ----------------------------------------------------------*/ 36 | 37 | /** 38 | * @addtogroup BEEP_Public_Functions 39 | * @{ 40 | */ 41 | 42 | /** 43 | * @brief Deinitializes the BEEP peripheral registers to their default reset 44 | * values. 45 | * @param None 46 | * @retval None 47 | */ 48 | void BEEP_DeInit(void) 49 | { 50 | BEEP->CSR = BEEP_CSR_RESET_VALUE; 51 | } 52 | 53 | /** 54 | * @brief Initializes the BEEP function according to the specified parameters. 55 | * @param BEEP_Frequency Frequency selection. 56 | * can be one of the values of @ref BEEP_Frequency_TypeDef. 57 | * @retval None 58 | * @par Required preconditions: 59 | * The LS RC calibration must be performed before calling this function. 60 | */ 61 | void BEEP_Init(BEEP_Frequency_TypeDef BEEP_Frequency) 62 | { 63 | 64 | /* Check parameter */ 65 | assert_param(IS_BEEP_FREQUENCY_OK(BEEP_Frequency)); 66 | 67 | /* Set a default calibration value if no calibration is done */ 68 | if ((BEEP->CSR & BEEP_CSR_BEEPDIV) == BEEP_CSR_BEEPDIV) 69 | { 70 | BEEP->CSR &= (uint8_t)(~BEEP_CSR_BEEPDIV); /* Clear bits */ 71 | BEEP->CSR |= BEEP_CALIBRATION_DEFAULT; 72 | } 73 | 74 | /* Select the output frequency */ 75 | BEEP->CSR &= (uint8_t)(~BEEP_CSR_BEEPSEL); 76 | BEEP->CSR |= (uint8_t)(BEEP_Frequency); 77 | 78 | } 79 | 80 | /** 81 | * @brief Enable or disable the BEEP function. 82 | * @param NewState Indicates the new state of the BEEP function. 83 | * @retval None 84 | * @par Required preconditions: 85 | * Initialisation of BEEP and LS RC calibration must be done before. 86 | */ 87 | void BEEP_Cmd(FunctionalState NewState) 88 | { 89 | if (NewState != DISABLE) 90 | { 91 | /* Enable the BEEP peripheral */ 92 | BEEP->CSR |= BEEP_CSR_BEEPEN; 93 | } 94 | else 95 | { 96 | /* Disable the BEEP peripheral */ 97 | BEEP->CSR &= (uint8_t)(~BEEP_CSR_BEEPEN); 98 | } 99 | } 100 | 101 | /** 102 | * @brief Update CSR register with the measured LSI frequency. 103 | * @par Note on the APR calculation: 104 | * A is the integer part of LSIFreqkHz/4 and x the decimal part. 105 | * x <= A/(1+2A) is equivalent to A >= x(1+2A) and also to 4A >= 4x(1+2A) [F1] 106 | * but we know that A + x = LSIFreqkHz/4 ==> 4x = LSIFreqkHz-4A 107 | * so [F1] can be written : 108 | * 4A >= (LSIFreqkHz-4A)(1+2A) 109 | * @param LSIFreqHz Low Speed RC frequency measured by timer (in Hz). 110 | * @retval None 111 | * @par Required preconditions: 112 | * - BEEP must be disabled to avoid unwanted interrupts. 113 | */ 114 | void BEEP_LSICalibrationConfig(uint32_t LSIFreqHz) 115 | { 116 | 117 | uint16_t lsifreqkhz; 118 | uint16_t A; 119 | 120 | /* Check parameter */ 121 | assert_param(IS_LSI_FREQUENCY_OK(LSIFreqHz)); 122 | 123 | lsifreqkhz = (uint16_t)(LSIFreqHz / 1000); /* Converts value in kHz */ 124 | 125 | /* Calculation of BEEPER calibration value */ 126 | 127 | BEEP->CSR &= (uint8_t)(~BEEP_CSR_BEEPDIV); /* Clear bits */ 128 | 129 | A = (uint16_t)(lsifreqkhz >> 3U); /* Division by 8, keep integer part only */ 130 | 131 | if ((8U * A) >= ((lsifreqkhz - (8U * A)) * (1U + (2U * A)))) 132 | { 133 | BEEP->CSR |= (uint8_t)(A - 2U); 134 | } 135 | else 136 | { 137 | BEEP->CSR |= (uint8_t)(A - 1U); 138 | } 139 | } 140 | 141 | /** 142 | * @} 143 | */ 144 | 145 | /** 146 | * @} 147 | */ 148 | 149 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 150 | -------------------------------------------------------------------------------- /mcu/std_lib/src/stm8s_can.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZiB/STM8S-USB/1844b1bc4d40433e264c68cd51c8f76a3d349eb6/mcu/std_lib/src/stm8s_can.c -------------------------------------------------------------------------------- /mcu/std_lib/src/stm8s_exti.c: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm8s_exti.c 4 | * @author MCD Application Team 5 | * @version V2.1.0 6 | * @date 18-November-2011 7 | * @brief This file contains all the functions for the EXTI peripheral. 8 | ****************************************************************************** 9 | * @attention 10 | * 11 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 12 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 13 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 14 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 15 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 16 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 17 | * 18 | *

© COPYRIGHT 2011 STMicroelectronics

19 | ****************************************************************************** 20 | */ 21 | 22 | /* Includes ------------------------------------------------------------------*/ 23 | #include "stm8s_exti.h" 24 | 25 | /** @addtogroup STM8S_StdPeriph_Driver 26 | * @{ 27 | */ 28 | /* Private typedef -----------------------------------------------------------*/ 29 | /* Private define ------------------------------------------------------------*/ 30 | /* Private macro -------------------------------------------------------------*/ 31 | /* Private variables ---------------------------------------------------------*/ 32 | /* Private function prototypes -----------------------------------------------*/ 33 | /* Private functions ---------------------------------------------------------*/ 34 | 35 | /* Public functions ----------------------------------------------------------*/ 36 | 37 | /** 38 | * @addtogroup EXTI_Public_Functions 39 | * @{ 40 | */ 41 | 42 | /** 43 | * @brief Deinitializes the external interrupt control registers to their default reset value. 44 | * @param None 45 | * @retval None 46 | */ 47 | void EXTI_DeInit(void) 48 | { 49 | EXTI->CR1 = EXTI_CR1_RESET_VALUE; 50 | EXTI->CR2 = EXTI_CR2_RESET_VALUE; 51 | } 52 | 53 | /** 54 | * @brief Set the external interrupt sensitivity of the selected port. 55 | * @warning 56 | * - The modification of external interrupt sensitivity is only possible when the interrupts are disabled. 57 | * - The normal behavior is to disable the interrupts before calling this function, and re-enable them after. 58 | * @param Port The port number to access. 59 | * @param SensitivityValue The external interrupt sensitivity value to set. 60 | * @retval None 61 | * @par Required preconditions: 62 | * Global interrupts must be disabled before calling this function. 63 | */ 64 | void EXTI_SetExtIntSensitivity(EXTI_Port_TypeDef Port, EXTI_Sensitivity_TypeDef SensitivityValue) 65 | { 66 | 67 | /* Check function parameters */ 68 | assert_param(IS_EXTI_PORT_OK(Port)); 69 | assert_param(IS_EXTI_SENSITIVITY_OK(SensitivityValue)); 70 | 71 | /* Set external interrupt sensitivity */ 72 | switch (Port) 73 | { 74 | case EXTI_PORT_GPIOA: 75 | EXTI->CR1 &= (uint8_t)(~EXTI_CR1_PAIS); 76 | EXTI->CR1 |= (uint8_t)(SensitivityValue); 77 | break; 78 | case EXTI_PORT_GPIOB: 79 | EXTI->CR1 &= (uint8_t)(~EXTI_CR1_PBIS); 80 | EXTI->CR1 |= (uint8_t)((uint8_t)(SensitivityValue) << 2); 81 | break; 82 | case EXTI_PORT_GPIOC: 83 | EXTI->CR1 &= (uint8_t)(~EXTI_CR1_PCIS); 84 | EXTI->CR1 |= (uint8_t)((uint8_t)(SensitivityValue) << 4); 85 | break; 86 | case EXTI_PORT_GPIOD: 87 | EXTI->CR1 &= (uint8_t)(~EXTI_CR1_PDIS); 88 | EXTI->CR1 |= (uint8_t)((uint8_t)(SensitivityValue) << 6); 89 | break; 90 | case EXTI_PORT_GPIOE: 91 | EXTI->CR2 &= (uint8_t)(~EXTI_CR2_PEIS); 92 | EXTI->CR2 |= (uint8_t)(SensitivityValue); 93 | break; 94 | default: 95 | break; 96 | } 97 | } 98 | 99 | /** 100 | * @brief Set the TLI interrupt sensitivity. 101 | * @param SensitivityValue The TLI interrupt sensitivity value. 102 | * @retval None 103 | * @par Required preconditions: 104 | * Global interrupts must be disabled before calling this function. 105 | */ 106 | void EXTI_SetTLISensitivity(EXTI_TLISensitivity_TypeDef SensitivityValue) 107 | { 108 | /* Check function parameters */ 109 | assert_param(IS_EXTI_TLISENSITIVITY_OK(SensitivityValue)); 110 | 111 | /* Set TLI interrupt sensitivity */ 112 | EXTI->CR2 &= (uint8_t)(~EXTI_CR2_TLIS); 113 | EXTI->CR2 |= (uint8_t)(SensitivityValue); 114 | } 115 | 116 | /** 117 | * @brief Get the external interrupt sensitivity of the selected port. 118 | * @param Port The port number to access. 119 | * @retval EXTI_Sensitivity_TypeDef The external interrupt sensitivity of the selected port. 120 | */ 121 | EXTI_Sensitivity_TypeDef EXTI_GetExtIntSensitivity(EXTI_Port_TypeDef Port) 122 | { 123 | uint8_t value = 0; 124 | 125 | /* Check function parameters */ 126 | assert_param(IS_EXTI_PORT_OK(Port)); 127 | 128 | switch (Port) 129 | { 130 | case EXTI_PORT_GPIOA: 131 | value = (uint8_t)(EXTI->CR1 & EXTI_CR1_PAIS); 132 | break; 133 | case EXTI_PORT_GPIOB: 134 | value = (uint8_t)((uint8_t)(EXTI->CR1 & EXTI_CR1_PBIS) >> 2); 135 | break; 136 | case EXTI_PORT_GPIOC: 137 | value = (uint8_t)((uint8_t)(EXTI->CR1 & EXTI_CR1_PCIS) >> 4); 138 | break; 139 | case EXTI_PORT_GPIOD: 140 | value = (uint8_t)((uint8_t)(EXTI->CR1 & EXTI_CR1_PDIS) >> 6); 141 | break; 142 | case EXTI_PORT_GPIOE: 143 | value = (uint8_t)(EXTI->CR2 & EXTI_CR2_PEIS); 144 | break; 145 | default: 146 | break; 147 | } 148 | 149 | return((EXTI_Sensitivity_TypeDef)value); 150 | } 151 | 152 | /** 153 | * @brief Get the TLI interrupt sensitivity. 154 | * @param None 155 | * @retval EXTI_TLISensitivity_TypeDef The TLI interrupt sensitivity read. 156 | */ 157 | EXTI_TLISensitivity_TypeDef EXTI_GetTLISensitivity(void) 158 | { 159 | 160 | uint8_t value = 0; 161 | 162 | /* Get TLI interrupt sensitivity */ 163 | value = (uint8_t)(EXTI->CR2 & EXTI_CR2_TLIS); 164 | 165 | return((EXTI_TLISensitivity_TypeDef)value); 166 | } 167 | 168 | /** 169 | * @} 170 | */ 171 | 172 | /** 173 | * @} 174 | */ 175 | 176 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 177 | -------------------------------------------------------------------------------- /mcu/std_lib/src/stm8s_flash.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZiB/STM8S-USB/1844b1bc4d40433e264c68cd51c8f76a3d349eb6/mcu/std_lib/src/stm8s_flash.c -------------------------------------------------------------------------------- /mcu/std_lib/src/stm8s_gpio.c: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm8s_gpio.c 4 | * @author MCD Application Team 5 | * @version V2.1.0 6 | * @date 18-November-2011 7 | * @brief This file contains all the functions for the GPIO peripheral. 8 | ****************************************************************************** 9 | * @attention 10 | * 11 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 12 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 13 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 14 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 15 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 16 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 17 | * 18 | *

© COPYRIGHT 2011 STMicroelectronics

19 | ****************************************************************************** 20 | */ 21 | 22 | /* Includes ------------------------------------------------------------------*/ 23 | #include "stm8s_gpio.h" 24 | 25 | /** @addtogroup STM8S_StdPeriph_Driver 26 | * @{ 27 | */ 28 | /* Private typedef -----------------------------------------------------------*/ 29 | /* Private define ------------------------------------------------------------*/ 30 | /* Private macro -------------------------------------------------------------*/ 31 | /* Private variables ---------------------------------------------------------*/ 32 | /* Private function prototypes -----------------------------------------------*/ 33 | /* Private functions ---------------------------------------------------------*/ 34 | 35 | /* Public functions ----------------------------------------------------------*/ 36 | 37 | /** 38 | * @addtogroup GPIO_Public_Functions 39 | * @{ 40 | */ 41 | 42 | /** 43 | * @brief Deinitializes the GPIOx peripheral registers to their default reset values. 44 | * @param GPIOx: Select the GPIO peripheral number (x = A to I). 45 | * @retval None 46 | */ 47 | void GPIO_DeInit(GPIO_TypeDef* GPIOx) 48 | { 49 | GPIOx->ODR = GPIO_ODR_RESET_VALUE; /* Reset Output Data Register */ 50 | GPIOx->DDR = GPIO_DDR_RESET_VALUE; /* Reset Data Direction Register */ 51 | GPIOx->CR1 = GPIO_CR1_RESET_VALUE; /* Reset Control Register 1 */ 52 | GPIOx->CR2 = GPIO_CR2_RESET_VALUE; /* Reset Control Register 2 */ 53 | } 54 | 55 | /** 56 | * @brief Initializes the GPIOx according to the specified parameters. 57 | * @param GPIOx : Select the GPIO peripheral number (x = A to I). 58 | * @param GPIO_Pin : This parameter contains the pin number, it can be any value 59 | * of the @ref GPIO_Pin_TypeDef enumeration. 60 | * @param GPIO_Mode : This parameter can be a value of the 61 | * @Ref GPIO_Mode_TypeDef enumeration. 62 | * @retval None 63 | */ 64 | 65 | void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, GPIO_Mode_TypeDef GPIO_Mode) 66 | { 67 | /*----------------------*/ 68 | /* Check the parameters */ 69 | /*----------------------*/ 70 | 71 | assert_param(IS_GPIO_MODE_OK(GPIO_Mode)); 72 | assert_param(IS_GPIO_PIN_OK(GPIO_Pin)); 73 | 74 | /* Reset corresponding bit to GPIO_Pin in CR2 register */ 75 | GPIOx->CR2 &= (uint8_t)(~(GPIO_Pin)); 76 | 77 | /*-----------------------------*/ 78 | /* Input/Output mode selection */ 79 | /*-----------------------------*/ 80 | 81 | if ((((uint8_t)(GPIO_Mode)) & (uint8_t)0x80) != (uint8_t)0x00) /* Output mode */ 82 | { 83 | if ((((uint8_t)(GPIO_Mode)) & (uint8_t)0x10) != (uint8_t)0x00) /* High level */ 84 | { 85 | GPIOx->ODR |= (uint8_t)GPIO_Pin; 86 | } 87 | else /* Low level */ 88 | { 89 | GPIOx->ODR &= (uint8_t)(~(GPIO_Pin)); 90 | } 91 | /* Set Output mode */ 92 | GPIOx->DDR |= (uint8_t)GPIO_Pin; 93 | } 94 | else /* Input mode */ 95 | { 96 | /* Set Input mode */ 97 | GPIOx->DDR &= (uint8_t)(~(GPIO_Pin)); 98 | } 99 | 100 | /*------------------------------------------------------------------------*/ 101 | /* Pull-Up/Float (Input) or Push-Pull/Open-Drain (Output) modes selection */ 102 | /*------------------------------------------------------------------------*/ 103 | 104 | if ((((uint8_t)(GPIO_Mode)) & (uint8_t)0x40) != (uint8_t)0x00) /* Pull-Up or Push-Pull */ 105 | { 106 | GPIOx->CR1 |= (uint8_t)GPIO_Pin; 107 | } 108 | else /* Float or Open-Drain */ 109 | { 110 | GPIOx->CR1 &= (uint8_t)(~(GPIO_Pin)); 111 | } 112 | 113 | /*-----------------------------------------------------*/ 114 | /* Interrupt (Input) or Slope (Output) modes selection */ 115 | /*-----------------------------------------------------*/ 116 | 117 | if ((((uint8_t)(GPIO_Mode)) & (uint8_t)0x20) != (uint8_t)0x00) /* Interrupt or Slow slope */ 118 | { 119 | GPIOx->CR2 |= (uint8_t)GPIO_Pin; 120 | } 121 | else /* No external interrupt or No slope control */ 122 | { 123 | GPIOx->CR2 &= (uint8_t)(~(GPIO_Pin)); 124 | } 125 | } 126 | 127 | /** 128 | * @brief Writes data to the specified GPIO data port. 129 | * @note The port must be configured in output mode. 130 | * @param GPIOx : Select the GPIO peripheral number (x = A to I). 131 | * @param GPIO_PortVal : Specifies the value to be written to the port output 132 | * data register. 133 | * @retval None 134 | */ 135 | void GPIO_Write(GPIO_TypeDef* GPIOx, uint8_t PortVal) 136 | { 137 | GPIOx->ODR = PortVal; 138 | } 139 | 140 | /** 141 | * @brief Writes high level to the specified GPIO pins. 142 | * @note The port must be configured in output mode. 143 | * @param GPIOx : Select the GPIO peripheral number (x = A to I). 144 | * @param PortPins : Specifies the pins to be turned high to the port output. 145 | * data register. 146 | * @retval None 147 | */ 148 | void GPIO_WriteHigh(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins) 149 | { 150 | GPIOx->ODR |= (uint8_t)PortPins; 151 | } 152 | 153 | /** 154 | * @brief Writes low level to the specified GPIO pins. 155 | * @note The port must be configured in output mode. 156 | * @param GPIOx : Select the GPIO peripheral number (x = A to I). 157 | * @param PortPins : Specifies the pins to be turned low to the port output. 158 | * data register. 159 | * @retval None 160 | */ 161 | void GPIO_WriteLow(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins) 162 | { 163 | GPIOx->ODR &= (uint8_t)(~PortPins); 164 | } 165 | 166 | /** 167 | * @brief Writes reverse level to the specified GPIO pins. 168 | * @note The port must be configured in output mode. 169 | * @param GPIOx : Select the GPIO peripheral number (x = A to I). 170 | * @param PortPins : Specifies the pins to be reversed to the port output. 171 | * data register. 172 | * @retval None 173 | */ 174 | void GPIO_WriteReverse(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins) 175 | { 176 | GPIOx->ODR ^= (uint8_t)PortPins; 177 | } 178 | 179 | /** 180 | * @brief Reads the specified GPIO output data port. 181 | * @note The port must be configured in input mode. 182 | * @param GPIOx : Select the GPIO peripheral number (x = A to I). 183 | * @retval GPIO output data port value. 184 | */ 185 | uint8_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx) 186 | { 187 | return ((uint8_t)GPIOx->ODR); 188 | } 189 | 190 | /** 191 | * @brief Reads the specified GPIO input data port. 192 | * @note The port must be configured in input mode. 193 | * @param GPIOx : Select the GPIO peripheral number (x = A to I). 194 | * @retval GPIO input data port value. 195 | */ 196 | uint8_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx) 197 | { 198 | return ((uint8_t)GPIOx->IDR); 199 | } 200 | 201 | /** 202 | * @brief Reads the specified GPIO input data pin. 203 | * @param GPIOx : Select the GPIO peripheral number (x = A to I). 204 | * @param GPIO_Pin : Specifies the pin number. 205 | * @retval BitStatus : GPIO input pin status. 206 | */ 207 | BitStatus GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin) 208 | { 209 | return ((BitStatus)(GPIOx->IDR & (uint8_t)GPIO_Pin)); 210 | } 211 | 212 | /** 213 | * @brief Configures the external pull-up on GPIOx pins. 214 | * @param GPIOx : Select the GPIO peripheral number (x = A to I). 215 | * @param GPIO_Pin : Specifies the pin number 216 | * @param NewState : The new state of the pull up pin. 217 | * @retval None 218 | */ 219 | void GPIO_ExternalPullUpConfig(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, FunctionalState NewState) 220 | { 221 | /* Check the parameters */ 222 | assert_param(IS_GPIO_PIN_OK(GPIO_Pin)); 223 | assert_param(IS_FUNCTIONALSTATE_OK(NewState)); 224 | 225 | if (NewState != DISABLE) /* External Pull-Up Set*/ 226 | { 227 | GPIOx->CR1 |= (uint8_t)GPIO_Pin; 228 | } else /* External Pull-Up Reset*/ 229 | { 230 | GPIOx->CR1 &= (uint8_t)(~(GPIO_Pin)); 231 | } 232 | } 233 | 234 | /** 235 | * @} 236 | */ 237 | 238 | /** 239 | * @} 240 | */ 241 | 242 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 243 | -------------------------------------------------------------------------------- /mcu/std_lib/src/stm8s_i2c.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZiB/STM8S-USB/1844b1bc4d40433e264c68cd51c8f76a3d349eb6/mcu/std_lib/src/stm8s_i2c.c -------------------------------------------------------------------------------- /mcu/std_lib/src/stm8s_itc.c: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm8s_itc.c 4 | * @author MCD Application Team 5 | * @version V2.1.0 6 | * @date 18-November-2011 7 | * @brief This file contains all the functions for the ITC peripheral. 8 | ****************************************************************************** 9 | * @attention 10 | * 11 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 12 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 13 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 14 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 15 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 16 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 17 | * 18 | *

© COPYRIGHT 2011 STMicroelectronics

19 | ****************************************************************************** 20 | */ 21 | 22 | /* Includes ------------------------------------------------------------------*/ 23 | #include "stm8s_itc.h" 24 | 25 | /** @addtogroup STM8S_StdPeriph_Driver 26 | * @{ 27 | */ 28 | /* Private typedef -----------------------------------------------------------*/ 29 | /* Private define ------------------------------------------------------------*/ 30 | /* Private macro -------------------------------------------------------------*/ 31 | /* Private variables ---------------------------------------------------------*/ 32 | /* Private function prototypes -----------------------------------------------*/ 33 | /* Private functions ---------------------------------------------------------*/ 34 | 35 | /** @addtogroup ITC_Private_Functions 36 | * @{ 37 | */ 38 | 39 | /** 40 | * @brief Utility function used to read CC register. 41 | * @param None 42 | * @retval CPU CC register value 43 | */ 44 | uint8_t ITC_GetCPUCC(void) 45 | { 46 | #ifdef _COSMIC_ 47 | _asm("push cc"); 48 | _asm("pop a"); 49 | return; /* Ignore compiler warning, the returned value is in A register */ 50 | #elif defined _RAISONANCE_ /* _RAISONANCE_ */ 51 | return _getCC_(); 52 | #else /* _IAR_ */ 53 | asm("push cc"); 54 | asm("pop a"); /* Ignore compiler warning, the returned value is in A register */ 55 | #endif /* _COSMIC_*/ 56 | } 57 | 58 | 59 | /** 60 | * @} 61 | */ 62 | 63 | /* Public functions ----------------------------------------------------------*/ 64 | 65 | /** @addtogroup ITC_Public_Functions 66 | * @{ 67 | */ 68 | 69 | /** 70 | * @brief Deinitializes the ITC registers to their default reset value. 71 | * @param None 72 | * @retval None 73 | */ 74 | void ITC_DeInit(void) 75 | { 76 | ITC->ISPR1 = ITC_SPRX_RESET_VALUE; 77 | ITC->ISPR2 = ITC_SPRX_RESET_VALUE; 78 | ITC->ISPR3 = ITC_SPRX_RESET_VALUE; 79 | ITC->ISPR4 = ITC_SPRX_RESET_VALUE; 80 | ITC->ISPR5 = ITC_SPRX_RESET_VALUE; 81 | ITC->ISPR6 = ITC_SPRX_RESET_VALUE; 82 | ITC->ISPR7 = ITC_SPRX_RESET_VALUE; 83 | ITC->ISPR8 = ITC_SPRX_RESET_VALUE; 84 | } 85 | 86 | /** 87 | * @brief Gets the interrupt software priority bits (I1, I0) value from CPU CC register. 88 | * @param None 89 | * @retval The interrupt software priority bits value. 90 | */ 91 | uint8_t ITC_GetSoftIntStatus(void) 92 | { 93 | return (uint8_t)(ITC_GetCPUCC() & CPU_CC_I1I0); 94 | } 95 | 96 | /** 97 | * @brief Gets the software priority of the specified interrupt source. 98 | * @param IrqNum : Specifies the peripheral interrupt source. 99 | * @retval ITC_PriorityLevel_TypeDef : Specifies the software priority of the interrupt source. 100 | */ 101 | ITC_PriorityLevel_TypeDef ITC_GetSoftwarePriority(ITC_Irq_TypeDef IrqNum) 102 | { 103 | 104 | uint8_t Value = 0; 105 | uint8_t Mask = 0; 106 | 107 | /* Check function parameters */ 108 | assert_param(IS_ITC_IRQ_OK((uint8_t)IrqNum)); 109 | 110 | /* Define the mask corresponding to the bits position in the SPR register */ 111 | Mask = (uint8_t)(0x03U << (((uint8_t)IrqNum % 4U) * 2U)); 112 | 113 | switch (IrqNum) 114 | { 115 | case ITC_IRQ_TLI: /* TLI software priority can be read but has no meaning */ 116 | case ITC_IRQ_AWU: 117 | case ITC_IRQ_CLK: 118 | case ITC_IRQ_PORTA: 119 | Value = (uint8_t)(ITC->ISPR1 & Mask); /* Read software priority */ 120 | break; 121 | case ITC_IRQ_PORTB: 122 | case ITC_IRQ_PORTC: 123 | case ITC_IRQ_PORTD: 124 | case ITC_IRQ_PORTE: 125 | Value = (uint8_t)(ITC->ISPR2 & Mask); /* Read software priority */ 126 | break; 127 | #if defined(STM8S208) || defined(STM8AF52Ax) 128 | case ITC_IRQ_CAN_RX: 129 | case ITC_IRQ_CAN_TX: 130 | #endif /*STM8S208 or STM8AF52Ax */ 131 | 132 | #ifdef STM8S903 133 | case ITC_IRQ_PORTF: 134 | #endif /*STM8S903*/ 135 | 136 | case ITC_IRQ_SPI: 137 | case ITC_IRQ_TIM1_OVF: 138 | Value = (uint8_t)(ITC->ISPR3 & Mask); /* Read software priority */ 139 | break; 140 | case ITC_IRQ_TIM1_CAPCOM: 141 | #ifdef STM8S903 142 | case ITC_IRQ_TIM5_OVFTRI: 143 | case ITC_IRQ_TIM5_CAPCOM: 144 | #else 145 | case ITC_IRQ_TIM2_OVF: 146 | case ITC_IRQ_TIM2_CAPCOM: 147 | #endif /*STM8S903*/ 148 | 149 | case ITC_IRQ_TIM3_OVF: 150 | Value = (uint8_t)(ITC->ISPR4 & Mask); /* Read software priority */ 151 | break; 152 | case ITC_IRQ_TIM3_CAPCOM: 153 | case ITC_IRQ_UART1_TX: 154 | case ITC_IRQ_UART1_RX: 155 | case ITC_IRQ_I2C: 156 | Value = (uint8_t)(ITC->ISPR5 & Mask); /* Read software priority */ 157 | break; 158 | #if defined(STM8S105) || defined(STM8S005) || defined(STM8AF626x) 159 | case ITC_IRQ_UART2_TX: 160 | case ITC_IRQ_UART2_RX: 161 | #endif /*STM8S105 or STM8AF626x*/ 162 | 163 | #if defined(STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8AF52Ax) || \ 164 | defined(STM8AF62Ax) 165 | case ITC_IRQ_UART3_TX: 166 | case ITC_IRQ_UART3_RX: 167 | case ITC_IRQ_ADC2: 168 | #endif /*STM8S208 or STM8S207 or STM8AF52Ax or STM8AF62Ax */ 169 | 170 | #if defined(STM8S105) || defined(STM8S005) || defined(STM8S103) || defined(STM8S003) || \ 171 | defined(STM8S903) || defined(STM8AF626x) 172 | case ITC_IRQ_ADC1: 173 | #endif /*STM8S105, STM8S103 or STM8S905 or STM8AF626x */ 174 | 175 | #ifdef STM8S903 176 | case ITC_IRQ_TIM6_OVFTRI: 177 | #else 178 | case ITC_IRQ_TIM4_OVF: 179 | #endif /*STM8S903*/ 180 | Value = (uint8_t)(ITC->ISPR6 & Mask); /* Read software priority */ 181 | break; 182 | case ITC_IRQ_EEPROM_EEC: 183 | Value = (uint8_t)(ITC->ISPR7 & Mask); /* Read software priority */ 184 | break; 185 | default: 186 | break; 187 | } 188 | 189 | Value >>= (uint8_t)(((uint8_t)IrqNum % 4u) * 2u); 190 | 191 | return((ITC_PriorityLevel_TypeDef)Value); 192 | 193 | } 194 | 195 | /** 196 | * @brief Sets the software priority of the specified interrupt source. 197 | * @note - The modification of the software priority is only possible when 198 | * the interrupts are disabled. 199 | * - The normal behavior is to disable the interrupt before calling 200 | * this function, and re-enable it after. 201 | * - The priority level 0 cannot be set (see product specification 202 | * for more details). 203 | * @param IrqNum : Specifies the peripheral interrupt source. 204 | * @param PriorityValue : Specifies the software priority value to set, 205 | * can be a value of @ref ITC_PriorityLevel_TypeDef . 206 | * @retval None 207 | */ 208 | void ITC_SetSoftwarePriority(ITC_Irq_TypeDef IrqNum, ITC_PriorityLevel_TypeDef PriorityValue) 209 | { 210 | 211 | uint8_t Mask = 0; 212 | uint8_t NewPriority = 0; 213 | 214 | /* Check function parameters */ 215 | assert_param(IS_ITC_IRQ_OK((uint8_t)IrqNum)); 216 | assert_param(IS_ITC_PRIORITY_OK(PriorityValue)); 217 | 218 | /* Check if interrupts are disabled */ 219 | assert_param(IS_ITC_INTERRUPTS_DISABLED); 220 | 221 | /* Define the mask corresponding to the bits position in the SPR register */ 222 | /* The mask is reversed in order to clear the 2 bits after more easily */ 223 | Mask = (uint8_t)(~(uint8_t)(0x03U << (((uint8_t)IrqNum % 4U) * 2U))); 224 | 225 | /* Define the new priority to write */ 226 | NewPriority = (uint8_t)((uint8_t)(PriorityValue) << (((uint8_t)IrqNum % 4U) * 2U)); 227 | 228 | switch (IrqNum) 229 | { 230 | 231 | case ITC_IRQ_TLI: /* TLI software priority can be written but has no meaning */ 232 | case ITC_IRQ_AWU: 233 | case ITC_IRQ_CLK: 234 | case ITC_IRQ_PORTA: 235 | ITC->ISPR1 &= Mask; 236 | ITC->ISPR1 |= NewPriority; 237 | break; 238 | 239 | case ITC_IRQ_PORTB: 240 | case ITC_IRQ_PORTC: 241 | case ITC_IRQ_PORTD: 242 | case ITC_IRQ_PORTE: 243 | ITC->ISPR2 &= Mask; 244 | ITC->ISPR2 |= NewPriority; 245 | break; 246 | 247 | #if defined(STM8S208) || defined(STM8AF52Ax) 248 | case ITC_IRQ_CAN_RX: 249 | case ITC_IRQ_CAN_TX: 250 | #endif /*STM8S208 or STM8AF52Ax */ 251 | 252 | #ifdef STM8S903 253 | case ITC_IRQ_PORTF: 254 | #endif /*STM8S903*/ 255 | case ITC_IRQ_SPI: 256 | case ITC_IRQ_TIM1_OVF: 257 | ITC->ISPR3 &= Mask; 258 | ITC->ISPR3 |= NewPriority; 259 | break; 260 | 261 | case ITC_IRQ_TIM1_CAPCOM: 262 | #ifdef STM8S903 263 | case ITC_IRQ_TIM5_OVFTRI: 264 | case ITC_IRQ_TIM5_CAPCOM: 265 | #else 266 | case ITC_IRQ_TIM2_OVF: 267 | case ITC_IRQ_TIM2_CAPCOM: 268 | #endif /*STM8S903*/ 269 | 270 | case ITC_IRQ_TIM3_OVF: 271 | ITC->ISPR4 &= Mask; 272 | ITC->ISPR4 |= NewPriority; 273 | break; 274 | 275 | case ITC_IRQ_TIM3_CAPCOM: 276 | case ITC_IRQ_UART1_TX: 277 | case ITC_IRQ_UART1_RX: 278 | case ITC_IRQ_I2C: 279 | ITC->ISPR5 &= Mask; 280 | ITC->ISPR5 |= NewPriority; 281 | break; 282 | 283 | #if defined(STM8S105) || defined(STM8S005) || defined(STM8AF626x) 284 | case ITC_IRQ_UART2_TX: 285 | case ITC_IRQ_UART2_RX: 286 | #endif /*STM8S105 or STM8AF626x */ 287 | 288 | #if defined(STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8AF52Ax) || \ 289 | defined(STM8AF62Ax) 290 | case ITC_IRQ_UART3_TX: 291 | case ITC_IRQ_UART3_RX: 292 | case ITC_IRQ_ADC2: 293 | #endif /*STM8S208 or STM8S207 or STM8AF52Ax or STM8AF62Ax */ 294 | 295 | #if defined(STM8S105) || defined(STM8S005) || defined(STM8S103) || defined(STM8S003) || \ 296 | defined(STM8S903) || defined(STM8AF626x) 297 | case ITC_IRQ_ADC1: 298 | #endif /*STM8S105, STM8S103 or STM8S905 or STM8AF626x */ 299 | 300 | #ifdef STM8S903 301 | case ITC_IRQ_TIM6_OVFTRI: 302 | #else 303 | case ITC_IRQ_TIM4_OVF: 304 | #endif /*STM8S903*/ 305 | ITC->ISPR6 &= Mask; 306 | ITC->ISPR6 |= NewPriority; 307 | break; 308 | 309 | case ITC_IRQ_EEPROM_EEC: 310 | ITC->ISPR7 &= Mask; 311 | ITC->ISPR7 |= NewPriority; 312 | break; 313 | 314 | default: 315 | break; 316 | 317 | } 318 | 319 | } 320 | 321 | /** 322 | * @} 323 | */ 324 | 325 | /** 326 | * @} 327 | */ 328 | 329 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 330 | -------------------------------------------------------------------------------- /mcu/std_lib/src/stm8s_iwdg.c: -------------------------------------------------------------------------------- 1 | /** 2 | ******************************************************************************** 3 | * @file stm8s_iwdg.c 4 | * @author MCD Application Team 5 | * @version V2.1.0 6 | * @date 18-November-2011 7 | * @brief This file contains all the functions for the IWDG peripheral. 8 | ****************************************************************************** 9 | * @attention 10 | * 11 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 12 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 13 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 14 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 15 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 16 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 17 | * 18 | *

© COPYRIGHT 2011 STMicroelectronics

19 | ****************************************************************************** 20 | */ 21 | 22 | /* Includes ------------------------------------------------------------------*/ 23 | #include "stm8s_iwdg.h" 24 | 25 | /* Private define ------------------------------------------------------------*/ 26 | /* Private macro -------------------------------------------------------------*/ 27 | /* Private variables ---------------------------------------------------------*/ 28 | /* Private function prototypes -----------------------------------------------*/ 29 | /* Private functions ---------------------------------------------------------*/ 30 | /* Public functions ----------------------------------------------------------*/ 31 | 32 | /** @addtogroup IWDG_Public_Functions 33 | * @{ 34 | */ 35 | 36 | /** 37 | * @brief Enables or disables write access to Prescaler and Reload registers. 38 | * @param IWDG_WriteAccess : New state of write access to Prescaler and Reload 39 | * registers. This parameter can be a value of @ref IWDG_WriteAccess_TypeDef. 40 | * @retval None 41 | */ 42 | void IWDG_WriteAccessCmd(IWDG_WriteAccess_TypeDef IWDG_WriteAccess) 43 | { 44 | /* Check the parameters */ 45 | assert_param(IS_IWDG_WRITEACCESS_MODE_OK(IWDG_WriteAccess)); 46 | 47 | IWDG->KR = (uint8_t)IWDG_WriteAccess; /* Write Access */ 48 | } 49 | 50 | /** 51 | * @brief Sets IWDG Prescaler value. 52 | * @note Write access should be enabled 53 | * @param IWDG_Prescaler : Specifies the IWDG Prescaler value. 54 | * This parameter can be a value of @ref IWDG_Prescaler_TypeDef. 55 | * @retval None 56 | */ 57 | void IWDG_SetPrescaler(IWDG_Prescaler_TypeDef IWDG_Prescaler) 58 | { 59 | /* Check the parameters */ 60 | assert_param(IS_IWDG_PRESCALER_OK(IWDG_Prescaler)); 61 | 62 | IWDG->PR = (uint8_t)IWDG_Prescaler; 63 | } 64 | 65 | /** 66 | * @brief Sets IWDG Reload value. 67 | * @note Write access should be enabled 68 | * @param IWDG_Reload : Reload register value. 69 | * This parameter must be a number between 0 and 0xFF. 70 | * @retval None 71 | */ 72 | void IWDG_SetReload(uint8_t IWDG_Reload) 73 | { 74 | IWDG->RLR = IWDG_Reload; 75 | } 76 | 77 | /** 78 | * @brief Reloads IWDG counter 79 | * @note Write access should be enabled 80 | * @param None 81 | * @retval None 82 | */ 83 | void IWDG_ReloadCounter(void) 84 | { 85 | IWDG->KR = IWDG_KEY_REFRESH; 86 | } 87 | 88 | /** 89 | * @brief Enables IWDG. 90 | * @param None 91 | * @retval None 92 | */ 93 | void IWDG_Enable(void) 94 | { 95 | IWDG->KR = IWDG_KEY_ENABLE; 96 | } 97 | 98 | /** 99 | * @} 100 | */ 101 | 102 | /** 103 | * @} 104 | */ 105 | 106 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 107 | -------------------------------------------------------------------------------- /mcu/std_lib/src/stm8s_rst.c: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm8s_rst.c 4 | * @author MCD Application Team 5 | * @version V2.1.0 6 | * @date 18-November-2011 7 | * @brief This file contains all the functions for the RST peripheral. 8 | ****************************************************************************** 9 | * @attention 10 | * 11 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 12 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 13 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 14 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 15 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 16 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 17 | * 18 | *

© COPYRIGHT 2011 STMicroelectronics

19 | ****************************************************************************** 20 | */ 21 | 22 | /* Includes ------------------------------------------------------------------*/ 23 | 24 | #include "stm8s_rst.h" 25 | 26 | /** @addtogroup STM8S_StdPeriph_Driver 27 | * @{ 28 | */ 29 | /* Private typedef -----------------------------------------------------------*/ 30 | /* Private define ------------------------------------------------------------*/ 31 | /* Private macro -------------------------------------------------------------*/ 32 | /* Private variables ---------------------------------------------------------*/ 33 | /* Private function prototypes -----------------------------------------------*/ 34 | /* Private Constants ---------------------------------------------------------*/ 35 | /* Public functions ----------------------------------------------------------*/ 36 | /** 37 | * @addtogroup RST_Public_Functions 38 | * @{ 39 | */ 40 | 41 | 42 | /** 43 | * @brief Checks whether the specified RST flag is set or not. 44 | * @param RST_Flag : specify the reset flag to check. 45 | * This parameter can be a value of @ref RST_FLAG_TypeDef. 46 | * @retval FlagStatus: status of the given RST flag. 47 | */ 48 | FlagStatus RST_GetFlagStatus(RST_Flag_TypeDef RST_Flag) 49 | { 50 | /* Check the parameters */ 51 | assert_param(IS_RST_FLAG_OK(RST_Flag)); 52 | 53 | /* Get flag status */ 54 | 55 | return ((FlagStatus)((uint8_t)RST->SR & (uint8_t)RST_Flag)); 56 | } 57 | 58 | /** 59 | * @brief Clears the specified RST flag. 60 | * @param RST_Flag : specify the reset flag to clear. 61 | * This parameter can be a value of @ref RST_FLAG_TypeDef. 62 | * @retval None 63 | */ 64 | void RST_ClearFlag(RST_Flag_TypeDef RST_Flag) 65 | { 66 | /* Check the parameters */ 67 | assert_param(IS_RST_FLAG_OK(RST_Flag)); 68 | 69 | RST->SR = (uint8_t)RST_Flag; 70 | } 71 | 72 | /** 73 | * @} 74 | */ 75 | 76 | /** 77 | * @} 78 | */ 79 | 80 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 81 | -------------------------------------------------------------------------------- /mcu/std_lib/src/stm8s_tim1.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZiB/STM8S-USB/1844b1bc4d40433e264c68cd51c8f76a3d349eb6/mcu/std_lib/src/stm8s_tim1.c -------------------------------------------------------------------------------- /mcu/std_lib/src/stm8s_tim2.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZiB/STM8S-USB/1844b1bc4d40433e264c68cd51c8f76a3d349eb6/mcu/std_lib/src/stm8s_tim2.c -------------------------------------------------------------------------------- /mcu/std_lib/src/stm8s_tim3.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZiB/STM8S-USB/1844b1bc4d40433e264c68cd51c8f76a3d349eb6/mcu/std_lib/src/stm8s_tim3.c -------------------------------------------------------------------------------- /mcu/std_lib/src/stm8s_tim4.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZiB/STM8S-USB/1844b1bc4d40433e264c68cd51c8f76a3d349eb6/mcu/std_lib/src/stm8s_tim4.c -------------------------------------------------------------------------------- /mcu/std_lib/src/stm8s_tim5.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZiB/STM8S-USB/1844b1bc4d40433e264c68cd51c8f76a3d349eb6/mcu/std_lib/src/stm8s_tim5.c -------------------------------------------------------------------------------- /mcu/std_lib/src/stm8s_tim6.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZiB/STM8S-USB/1844b1bc4d40433e264c68cd51c8f76a3d349eb6/mcu/std_lib/src/stm8s_tim6.c -------------------------------------------------------------------------------- /mcu/std_lib/src/stm8s_uart1.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZiB/STM8S-USB/1844b1bc4d40433e264c68cd51c8f76a3d349eb6/mcu/std_lib/src/stm8s_uart1.c -------------------------------------------------------------------------------- /mcu/std_lib/src/stm8s_uart2.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZiB/STM8S-USB/1844b1bc4d40433e264c68cd51c8f76a3d349eb6/mcu/std_lib/src/stm8s_uart2.c -------------------------------------------------------------------------------- /mcu/std_lib/src/stm8s_wwdg.c: -------------------------------------------------------------------------------- 1 | /** 2 | ******************************************************************************** 3 | * @file stm8s_wwdg.c 4 | * @author MCD Application Team 5 | * @version V2.1.0 6 | * @date 18-November-2011 7 | * @brief This file contains all the functions for the WWDG peripheral. 8 | ****************************************************************************** 9 | * @attention 10 | * 11 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 12 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 13 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 14 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 15 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 16 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 17 | * 18 | *

© COPYRIGHT 2011 STMicroelectronics

19 | ****************************************************************************** 20 | */ 21 | 22 | /* Includes ------------------------------------------------------------------*/ 23 | #include "stm8s_wwdg.h" 24 | 25 | /** @addtogroup STM8S_StdPeriph_Driver 26 | * @{ 27 | */ 28 | /* Private define ------------------------------------------------------------*/ 29 | #define BIT_MASK ((uint8_t)0x7F) 30 | /* Private macro -------------------------------------------------------------*/ 31 | /* Private variables ---------------------------------------------------------*/ 32 | /* Private function prototypes -----------------------------------------------*/ 33 | /* Private functions ---------------------------------------------------------*/ 34 | 35 | /** @addtogroup WWDG_Public_Functions 36 | * @{ 37 | */ 38 | 39 | /** 40 | * @brief Initializes the WWDG peripheral. 41 | * This function set Window Register = WindowValue, Counter Register 42 | * according to Counter and \b ENABLE \b WWDG 43 | * @param Counter : WWDG counter value 44 | * @param WindowValue : specifies the WWDG Window Register, range is 0x00 to 0x7F. 45 | * @retval None 46 | */ 47 | void WWDG_Init(uint8_t Counter, uint8_t WindowValue) 48 | { 49 | /* Check the parameters */ 50 | assert_param(IS_WWDG_WINDOWLIMITVALUE_OK(WindowValue)); 51 | 52 | WWDG->WR = WWDG_WR_RESET_VALUE; 53 | WWDG->CR = (uint8_t)((uint8_t)(WWDG_CR_WDGA | WWDG_CR_T6) | (uint8_t)Counter); 54 | WWDG->WR = (uint8_t)((uint8_t)(~WWDG_CR_WDGA) & (uint8_t)(WWDG_CR_T6 | WindowValue)); 55 | } 56 | 57 | /** 58 | * @brief Refreshes the WWDG peripheral. 59 | * @param Counter : WWDG Counter Value 60 | * This parameter must be a number between 0x40 and 0x7F. 61 | * @retval None 62 | */ 63 | void WWDG_SetCounter(uint8_t Counter) 64 | { 65 | 66 | /* Check the parameters */ 67 | assert_param(IS_WWDG_COUNTERVALUE_OK(Counter)); 68 | 69 | /* Write to T[6:0] bits to configure the counter value, no need to do 70 | a read-modify-write; writing a 0 to WDGA bit does nothing */ 71 | WWDG->CR = (uint8_t)(Counter & (uint8_t)BIT_MASK); 72 | 73 | } 74 | 75 | /** 76 | * @brief Gets the WWDG Counter Value. 77 | * This value could be used to check if WWDG is in the window, where 78 | * refresh is allowed. 79 | * @param None 80 | * @retval WWDG Counter Value 81 | */ 82 | uint8_t WWDG_GetCounter(void) 83 | { 84 | return(WWDG->CR); 85 | } 86 | 87 | /** 88 | * @brief Generates immediate WWDG RESET. 89 | * @param None 90 | * @retval None 91 | */ 92 | void WWDG_SWReset(void) 93 | { 94 | WWDG->CR = WWDG_CR_WDGA; /* Activate WWDG, with clearing T6 */ 95 | } 96 | 97 | /** 98 | * @brief Sets the WWDG window value. 99 | * @param WindowValue: specifies the window value to be compared to the 100 | * downcounter. 101 | * This parameter value must be lower than 0x80. 102 | * @retval None 103 | */ 104 | void WWDG_SetWindowValue(uint8_t WindowValue) 105 | { 106 | /* Check the parameters */ 107 | assert_param(IS_WWDG_WINDOWLIMITVALUE_OK(WindowValue)); 108 | 109 | WWDG->WR = (uint8_t)((uint8_t)(~WWDG_CR_WDGA) & (uint8_t)(WWDG_CR_T6 | WindowValue)); 110 | } 111 | /** 112 | * @} 113 | */ 114 | 115 | /** 116 | * @} 117 | */ 118 | 119 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 120 | -------------------------------------------------------------------------------- /mcu/stm8_interrupt_vector.c: -------------------------------------------------------------------------------- 1 | /* BASIC INTERRUPT VECTORS TABLE FOR STM8 devices 2 | * Copyright (c) 2011 STMicroelectronics 3 | */ 4 | 5 | #include "stm8s_it.h" 6 | 7 | typedef void @far (*interrupt_handler_t)(void); 8 | 9 | struct interrupt_vector { 10 | u8 interrupt_instruction; 11 | interrupt_handler_t interrupt_handler; 12 | }; 13 | 14 | extern void usb_rx(void); 15 | 16 | struct interrupt_vector const _vectab[] = { 17 | {0x82, (interrupt_handler_t)_stext}, /* RESET */ 18 | {0x82, (interrupt_handler_t)TRAP_IRQHandler}, /* TRAP - Software interrupt */ 19 | {0x82, (interrupt_handler_t)TLI_IRQHandler}, /* irq0 - External Top Level interrupt (TLI) */ 20 | {0x82, (interrupt_handler_t)AWU_IRQHandler}, /* irq1 - Auto Wake Up from Halt interrupt */ 21 | {0x82, (interrupt_handler_t)CLK_IRQHandler}, /* irq2 - Clock Controller interrupt */ 22 | {0x82, (interrupt_handler_t)EXTI_PORTA_IRQHandler}, /* irq3 - External interrupt 0 (GPIOA) */ 23 | {0x82, (interrupt_handler_t)EXTI_PORTB_IRQHandler}, /* irq4 - External interrupt 1 (GPIOB) */ 24 | {0x82, (interrupt_handler_t)EXTI_PORTC_IRQHandler}, /* irq5 - External interrupt 2 (GPIOC) */ 25 | {0x82, (interrupt_handler_t)EXTI_PORTD_IRQHandler}, /* irq6 - External interrupt 3 (GPIOD) */ 26 | {0x82, (interrupt_handler_t)EXTI_PORTE_IRQHandler}, /* irq7 - External interrupt 4 (GPIOE) */ 27 | 28 | #if defined (STM8S208) || defined (STM8AF52Ax) 29 | {0x82, (interrupt_handler_t)CAN_RX_IRQHandler}, /* irq8 - CAN Rx interrupt */ 30 | {0x82, (interrupt_handler_t)CAN_TX_IRQHandler}, /* irq9 - CAN Tx/ER/SC interrupt */ 31 | #elif defined (STM8S903) 32 | {0x82, (interrupt_handler_t)EXTI_PORTF_IRQHandler}, /* irq8 - External interrupt 5 (GPIOF) */ 33 | {0x82, (interrupt_handler_t)NonHandledInterrupt}, /* irq9 - Reserved */ 34 | #else /*STM8S207, STM8S105 or STM8AF62Ax or STM8AF626x*/ 35 | {0x82, (interrupt_handler_t)NonHandledInterrupt}, /* irq8 - Reserved */ 36 | {0x82, (interrupt_handler_t)NonHandledInterrupt}, /* irq9 - Reserved */ 37 | #endif /* STM8S208 or STM8AF52Ax */ 38 | {0x82, (interrupt_handler_t)SPI_IRQHandler}, /* irq10 - SPI End of transfer interrupt */ 39 | {0x82, (interrupt_handler_t)TIM1_UPD_OVF_TRG_BRK_IRQHandler}, /* irq11 - TIM1 Update/Overflow/Trigger/Break interrupt */ 40 | /*{0x82, (interrupt_handler_t)TIM1_CAP_COM_IRQHandler}, /* irq12 - TIM1 Capture/Compare interrupt */ 41 | {0x82, (interrupt_handler_t)usb_rx}, 42 | 43 | #ifdef STM8S903 44 | {0x82, (interrupt_handler_t)TIM5_UPD_OVF_BRK_TRG_IRQHandler}, /* irq13 - TIM5 Update/Overflow/Break/Trigger interrupt */ 45 | {0x82, (interrupt_handler_t)TIM5_CAP_COM_IRQHandler}, /* irq14 - TIM5 Capture/Compare interrupt */ 46 | 47 | #else /*STM8S208, STM8S207, STM8S105 or STM8S103 or STM8AF62Ax or STM8AF52Ax or STM8AF626x*/ 48 | {0x82, (interrupt_handler_t)TIM2_UPD_OVF_BRK_IRQHandler}, /* irq13 - TIM2 Update/Overflow/Break interrupt */ 49 | {0x82, (interrupt_handler_t)TIM2_CAP_COM_IRQHandler}, /* irq14 - TIM2 Capture/Compare interrupt */ 50 | #endif /*STM8S903*/ 51 | 52 | #if defined (STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8S105) || \ 53 | defined(STM8S005) || defined(STM8AF52Ax) || defined(STM8AF62Ax) || defined(STM8AF626x) 54 | {0x82, (interrupt_handler_t)TIM3_UPD_OVF_BRK_IRQHandler}, /* irq15 - TIM3 Update/Overflow/Break interrupt */ 55 | {0x82, (interrupt_handler_t)TIM3_CAP_COM_IRQHandler}, /* irq16 - TIM3 Capture/Compare interrupt */ 56 | #else 57 | {0x82, (interrupt_handler_t)NonHandledInterrupt}, /* irq15 - Reserved */ 58 | {0x82, (interrupt_handler_t)NonHandledInterrupt}, /* irq16 - Reserved */ 59 | #endif /*STM8S208, STM8S207, STM8S105 or STM8AF62Ax or STM8AF52Ax or STM8AF626x*/ 60 | 61 | #if defined (STM8S105) || defined (STM8S005) || defined(STM8AF626x) 62 | {0x82, (interrupt_handler_t)NonHandledInterrupt}, /* irq17 - Reserved */ 63 | {0x82, (interrupt_handler_t)NonHandledInterrupt}, /* irq18 - Reserved */ 64 | #else 65 | {0x82, (interrupt_handler_t)UART1_TX_IRQHandler}, /* irq17 - UART1 Tx complete interrupt */ 66 | {0x82, (interrupt_handler_t)UART1_RX_IRQHandler}, /* irq18 - UART1 Rx interrupt */ 67 | #endif /*STM8S105 or STM8AF626x */ 68 | {0x82, (interrupt_handler_t)I2C_IRQHandler}, /* irq19 - I2C interrupt */ 69 | 70 | #if defined(STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8AF52Ax) || defined(STM8AF62Ax) 71 | 72 | {0x82, (interrupt_handler_t)UART3_TX_IRQHandler}, /* irq20 - UART3 Tx interrupt */ 73 | {0x82, (interrupt_handler_t)UART3_RX_IRQHandler}, /* irq21 - UART3 Rx interrupt */ 74 | #elif defined (STM8S105) || defined (STM8S005) || defined (STM8AF626x) 75 | {0x82, (interrupt_handler_t)UART2_TX_IRQHandler}, /* irq20 - UART2 Tx interrupt */ 76 | {0x82, (interrupt_handler_t)UART2_RX_IRQHandler}, /* irq21 - UART2 Rx interrupt */ 77 | 78 | #else /* STM8S103, STM8S903 */ 79 | {0x82, (interrupt_handler_t)NonHandledInterrupt}, /* irq20 - Reserved */ 80 | {0x82, (interrupt_handler_t)NonHandledInterrupt}, /* irq21 - Reserved */ 81 | #endif /* STM8S208, STM8S207, STM8AF52Ax or STM8AF62Ax */ 82 | 83 | #if defined(STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8AF52Ax) || defined(STM8AF62Ax) 84 | {0x82, (interrupt_handler_t)ADC2_IRQHandler}, /* irq22 - ADC2 end of conversion interrupt */ 85 | #else /* STM8S105, STM8S103, STM8S903 */ 86 | {0x82, (interrupt_handler_t)ADC1_IRQHandler}, /* irq22 - ADC1 end of conversion/Analog watchdog interrupts */ 87 | 88 | #endif /* STM8S208, STM8S207, STM8AF52Ax or STM8AF62Ax */ 89 | 90 | #ifdef STM8S903 91 | {0x82, (interrupt_handler_t)TIM6_UPD_OVF_TRG_IRQHandler}, /* irq23 - TIM6 Update/Overflow/Trigger interrupt */ 92 | #else 93 | {0x82, (interrupt_handler_t)TIM4_UPD_OVF_IRQHandler}, /* irq23 - TIM4 Update/Overflow interrupt */ 94 | #endif /*STM8S903*/ 95 | {0x82, (interrupt_handler_t)EEPROM_EEC_IRQHandler}, /* irq24 - FLASH interrupt */ 96 | {0x82, (interrupt_handler_t)NonHandledInterrupt}, /* irq25 - Reserved */ 97 | {0x82, (interrupt_handler_t)NonHandledInterrupt}, /* irq26 - Reserved */ 98 | {0x82, (interrupt_handler_t)NonHandledInterrupt}, /* irq27 - Reserved */ 99 | {0x82, (interrupt_handler_t)NonHandledInterrupt}, /* irq28 - Reserved */ 100 | {0x82, (interrupt_handler_t)NonHandledInterrupt}, /* irq29 - Reserved */ 101 | 102 | }; 103 | 104 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 105 | -------------------------------------------------------------------------------- /mcu/stm8s003f3.ini: -------------------------------------------------------------------------------- 1 | define emulator-reset-port-mcu 2 | target gdi -dll swim\stm_swim.dll -stlink3 -port $arg0 -mcuname $arg1 3 | mcuname -set $arg1 4 | end 5 | 6 | emulator-reset-port-mcu usb://usb stm8s003f3 7 | quit -------------------------------------------------------------------------------- /mcu/stm8s003f3.lsf: -------------------------------------------------------------------------------- 1 | #========================================================== 2 | # File: Linker Script File 3 | # Date: 2013-01-02 4 | # Denis Zheleznyakov aka ZiB @ ZiBlog.ru 5 | #========================================================== 6 | 7 | # флеш-память: программный код, константы 8 | +seg .const -b 0x8480 -m 0x1f80 -n .const -it 9 | +seg .text -a .const -n .text 10 | 11 | # EEPROM 12 | +seg .eeprom -b 0x4000 -m 0x80 -n .eeprom 13 | 14 | # ОЗУ: нулевая страница 15 | +seg .bsct -b 0x0 -m 0x100 -n .bsct 16 | +seg .ubsct -a .bsct -n .ubsct 17 | +seg .bit -a .ubsct -n .bit -id 18 | #+seg .share -a .bit -n .share -is 19 | 20 | # ОЗУ: 21 | +seg .data -b 0x100 -m 0x100 -n .data 22 | +seg .in_ram -a .data -n .in_ram -ic 23 | +seg .bss -a .in_ram -n .bss 24 | 25 | #---------------------------------------------------------- 26 | 27 | # начальная инициализация 28 | crtsi0.sm8 29 | 30 | # исходники 31 | target/main.o 32 | target/usb.o 33 | target/macros.o 34 | target/stm8s_it.o 35 | target/stm8s_clk.o 36 | target/stm8s_tim1.o 37 | target/stm8s_tim2.o 38 | target/stm8s_tim4.o 39 | target/stm8s_uart1.o 40 | 41 | # библиотеки 42 | libis0.sm8 43 | libm0.sm8 44 | 45 | # таблица прерываний 46 | +seg .const -b 0x8000 -k 47 | target/stm8_interrupt_vector.o 48 | 49 | +seg .text -b 0x8080 50 | target/usb_tx.o 51 | 52 | +seg .text -b 0x8280 53 | target/usb_rx.o 54 | 55 | # определения используются при начальной инициализации 56 | +def __endzp=@.ubsct 57 | +def __memory=@.bss 58 | +def __startmem=@.bss 59 | +def __endmem=0x1ff 60 | +def __stack=0x3ff 61 | 62 | -------------------------------------------------------------------------------- /mcu/stm8s_conf.h: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm8s_conf.h 4 | * @author MCD Application Team 5 | * @version V2.1.0 6 | * @date 18-November-2011 7 | * @brief This file is used to configure the Library. 8 | ****************************************************************************** 9 | * @attention 10 | * 11 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 12 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 13 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 14 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 15 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 16 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 17 | * 18 | *

© COPYRIGHT 2011 STMicroelectronics

19 | ****************************************************************************** 20 | */ 21 | 22 | /* Define to prevent recursive inclusion -------------------------------------*/ 23 | #ifndef __STM8S_CONF_H 24 | #define __STM8S_CONF_H 25 | 26 | /* Includes ------------------------------------------------------------------*/ 27 | #include "stm8s.h" 28 | 29 | /* Uncomment the line below to enable peripheral header file inclusion */ 30 | #if defined(STM8S105) || defined(STM8S005) || defined(STM8S103) || defined(STM8S003) ||\ 31 | defined(STM8S903) || defined (STM8AF626x) 32 | #include "stm8s_adc1.h" 33 | #endif /* (STM8S105) ||(STM8S103) || (STM8S903) || STM8AF626x*/ 34 | #if defined(STM8S208) || defined(STM8S207) || defined(STM8S007) || defined (STM8AF52Ax) ||\ 35 | defined (STM8AF62Ax) 36 | #include "stm8s_adc2.h" 37 | #endif /* (STM8S208) || (STM8S207) || (STM8AF62Ax) || (STM8AF52Ax) */ 38 | #include "stm8s_awu.h" 39 | #include "stm8s_beep.h" 40 | #if defined (STM8S208) || defined (STM8AF52Ax) 41 | #include "stm8s_can.h" 42 | #endif /* STM8S208 || STM8AF52Ax */ 43 | #include "stm8s_clk.h" 44 | #include "stm8s_exti.h" 45 | #include "stm8s_flash.h" 46 | #include "stm8s_gpio.h" 47 | #include "stm8s_i2c.h" 48 | #include "stm8s_itc.h" 49 | #include "stm8s_iwdg.h" 50 | #include "stm8s_rst.h" 51 | #include "stm8s_spi.h" 52 | #include "stm8s_tim1.h" 53 | #ifndef STM8S903 54 | #include "stm8s_tim2.h" 55 | #endif /* STM8S903 */ 56 | #if defined(STM8S208) || defined(STM8S207) || defined(STM8S007) ||defined(STM8S105) ||\ 57 | defined(STM8S005) || defined (STM8AF52Ax) || defined (STM8AF62Ax) || defined (STM8AF626x) 58 | #include "stm8s_tim3.h" 59 | #endif /* (STM8S208) ||defined(STM8S207) || defined(STM8S007) ||defined(STM8S105) */ 60 | #ifndef STM8S903 61 | #include "stm8s_tim4.h" 62 | #endif /* STM8S903 */ 63 | #ifdef STM8S903 64 | #include "stm8s_tim5.h" 65 | #include "stm8s_tim6.h" 66 | #endif /* STM8S903 */ 67 | #if defined(STM8S208) ||defined(STM8S207) || defined(STM8S007) ||defined(STM8S103) ||\ 68 | defined(STM8S003) || defined(STM8S903) || defined (STM8AF52Ax) || defined (STM8AF62Ax) 69 | #include "stm8s_uart1.h" 70 | #endif /* STM8S208 || STM8S207 || STM8S103 ||STM8S903 || STM8AF52Ax || STM8AF62Ax */ 71 | #if defined(STM8S105) || defined(STM8S005) || defined (STM8AF626x) 72 | #include "stm8s_uart2.h" 73 | #endif /* STM8S105 || STM8AF626x */ 74 | #if defined(STM8S208) ||defined(STM8S207) || defined(STM8S007) || defined (STM8AF52Ax) ||\ 75 | defined (STM8AF62Ax) 76 | #include "stm8s_uart3.h" 77 | #endif /* STM8S208 || STM8S207 || STM8AF52Ax || STM8AF62Ax */ 78 | #include "stm8s_wwdg.h" 79 | 80 | /* Exported types ------------------------------------------------------------*/ 81 | /* Exported constants --------------------------------------------------------*/ 82 | /* Uncomment the line below to expanse the "assert_param" macro in the 83 | Standard Peripheral Library drivers code */ 84 | //#define USE_FULL_ASSERT (1) 85 | 86 | /* Exported macro ------------------------------------------------------------*/ 87 | #ifdef USE_FULL_ASSERT 88 | 89 | /** 90 | * @brief The assert_param macro is used for function's parameters check. 91 | * @param expr: If expr is false, it calls assert_failed function 92 | * which reports the name of the source file and the source 93 | * line number of the call that failed. 94 | * If expr is true, it returns no value. 95 | * @retval : None 96 | */ 97 | #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) 98 | /* Exported functions ------------------------------------------------------- */ 99 | void assert_failed(uint8_t* file, uint32_t line); 100 | #else 101 | #define assert_param(expr) ((void)0) 102 | #endif /* USE_FULL_ASSERT */ 103 | 104 | #endif /* __STM8S_CONF_H */ 105 | 106 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 107 | -------------------------------------------------------------------------------- /mcu/stm8s_it.c: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm8s_it.c 4 | * @author MCD Application Team 5 | * @version V2.1.0 6 | * @date 18-November-2011 7 | * @brief Main Interrupt Service Routines. 8 | * This file provides template for all peripherals interrupt service 9 | * routine. 10 | ****************************************************************************** 11 | * @attention 12 | * 13 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 14 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 15 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 16 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 17 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 18 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 19 | * 20 | *

© COPYRIGHT 2011 STMicroelectronics

21 | ****************************************************************************** 22 | */ 23 | 24 | /* Includes ------------------------------------------------------------------*/ 25 | #include "main.h" 26 | #include "stm8s_it.h" 27 | 28 | #ifdef _COSMIC_ 29 | INTERRUPT_HANDLER(NonHandledInterrupt) 30 | { 31 | } 32 | #endif /*_COSMIC_*/ 33 | 34 | INTERRUPT_HANDLER_TRAP( TRAP_IRQHandler) 35 | { 36 | } 37 | 38 | INTERRUPT_HANDLER( TLI_IRQHandler) 39 | { 40 | } 41 | 42 | INTERRUPT_HANDLER( AWU_IRQHandler) 43 | { 44 | } 45 | 46 | INTERRUPT_HANDLER( CLK_IRQHandler) 47 | { 48 | } 49 | 50 | INTERRUPT_HANDLER( EXTI_PORTA_IRQHandler) 51 | { 52 | } 53 | 54 | INTERRUPT_HANDLER( EXTI_PORTB_IRQHandler) 55 | { 56 | } 57 | 58 | INTERRUPT_HANDLER( EXTI_PORTC_IRQHandler) 59 | { 60 | } 61 | 62 | INTERRUPT_HANDLER( EXTI_PORTD_IRQHandler) 63 | { 64 | } 65 | 66 | INTERRUPT_HANDLER( EXTI_PORTE_IRQHandler) 67 | { 68 | } 69 | 70 | #ifdef STM8S903 71 | INTERRUPT_HANDLER(EXTI_PORTF_IRQHandler) 72 | { 73 | } 74 | #endif /*STM8S903*/ 75 | 76 | #if defined (STM8S208) || defined (STM8AF52Ax) 77 | INTERRUPT_HANDLER(CAN_RX_IRQHandler) 78 | { 79 | } 80 | 81 | INTERRUPT_HANDLER(CAN_TX_IRQHandler) 82 | { 83 | } 84 | #endif /*STM8S208 || STM8AF52Ax */ 85 | 86 | INTERRUPT_HANDLER( SPI_IRQHandler) 87 | { 88 | } 89 | 90 | INTERRUPT_HANDLER( TIM1_UPD_OVF_TRG_BRK_IRQHandler) 91 | { 92 | } 93 | 94 | //INTERRUPT_HANDLER( TIM1_CAP_COM_IRQHandler) 95 | //{ 96 | //} 97 | 98 | #ifdef STM8S903 99 | INTERRUPT_HANDLER(TIM5_UPD_OVF_BRK_TRG_IRQHandler) 100 | { 101 | } 102 | 103 | INTERRUPT_HANDLER(TIM5_CAP_COM_IRQHandler) 104 | { 105 | } 106 | 107 | #else /*STM8S208, STM8S207, STM8S105 or STM8S103 or STM8AF62Ax or STM8AF52Ax or STM8AF626x */ 108 | INTERRUPT_HANDLER( TIM2_UPD_OVF_BRK_IRQHandler) 109 | { 110 | } 111 | 112 | INTERRUPT_HANDLER( TIM2_CAP_COM_IRQHandler) 113 | { 114 | } 115 | #endif /*STM8S903*/ 116 | 117 | #if defined (STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8S105) || \ 118 | defined(STM8S005) || defined (STM8AF62Ax) || defined (STM8AF52Ax) || defined (STM8AF626x) 119 | INTERRUPT_HANDLER(TIM3_UPD_OVF_BRK_IRQHandler) 120 | { 121 | } 122 | 123 | INTERRUPT_HANDLER(TIM3_CAP_COM_IRQHandler) 124 | { 125 | } 126 | #endif /*STM8S208, STM8S207 or STM8S105 or STM8AF62Ax or STM8AF52Ax or STM8AF626x */ 127 | 128 | #if defined (STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8S103) || \ 129 | defined(STM8S003) || defined (STM8AF62Ax) || defined (STM8AF52Ax) || defined (STM8S903) 130 | INTERRUPT_HANDLER( UART1_TX_IRQHandler) 131 | { 132 | } 133 | 134 | INTERRUPT_HANDLER( UART1_RX_IRQHandler) 135 | { 136 | } 137 | #endif /*STM8S208 or STM8S207 or STM8S103 or STM8S903 or STM8AF62Ax or STM8AF52Ax */ 138 | 139 | INTERRUPT_HANDLER( I2C_IRQHandler) 140 | { 141 | } 142 | 143 | #if defined(STM8S105) || defined(STM8S005) || defined (STM8AF626x) 144 | INTERRUPT_HANDLER(UART2_TX_IRQHandler) 145 | { 146 | } 147 | 148 | INTERRUPT_HANDLER(UART2_RX_IRQHandler) 149 | { 150 | } 151 | #endif /* STM8S105 or STM8AF626x */ 152 | 153 | #if defined(STM8S207) || defined(STM8S007) || defined(STM8S208) || defined (STM8AF52Ax) || defined (STM8AF62Ax) 154 | INTERRUPT_HANDLER(UART3_TX_IRQHandler) 155 | { 156 | } 157 | 158 | INTERRUPT_HANDLER(UART3_RX_IRQHandler) 159 | { 160 | } 161 | #endif /*STM8S208 or STM8S207 or STM8AF52Ax or STM8AF62Ax */ 162 | 163 | #if defined(STM8S207) || defined(STM8S007) || defined(STM8S208) || defined (STM8AF52Ax) || defined (STM8AF62Ax) 164 | INTERRUPT_HANDLER(ADC2_IRQHandler) 165 | { 166 | } 167 | #else /*STM8S105, STM8S103 or STM8S903 or STM8AF626x */ 168 | INTERRUPT_HANDLER( ADC1_IRQHandler) 169 | { 170 | } 171 | #endif /*STM8S208 or STM8S207 or STM8AF52Ax or STM8AF62Ax */ 172 | 173 | #ifdef STM8S903 174 | INTERRUPT_HANDLER(TIM6_UPD_OVF_TRG_IRQHandler) 175 | { 176 | } 177 | #else /*STM8S208, STM8S207, STM8S105 or STM8S103 or STM8AF52Ax or STM8AF62Ax or STM8AF626x */ 178 | /** 179 | * @brief Timer4 Update/Overflow Interrupt routine. 180 | * @param None 181 | * @retval None 182 | */ 183 | 184 | INTERRUPT_HANDLER( TIM4_UPD_OVF_IRQHandler) 185 | { 186 | } 187 | #endif /*STM8S903*/ 188 | 189 | INTERRUPT_HANDLER( EEPROM_EEC_IRQHandler) 190 | { 191 | } 192 | 193 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 194 | -------------------------------------------------------------------------------- /mcu/stm8s_it.h: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm8s_it.h 4 | * @author MCD Application Team 5 | * @version V2.1.0 6 | * @date 18-November-2011 7 | * @brief This file contains the headers of the interrupt handlers 8 | ****************************************************************************** 9 | * @attention 10 | * 11 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 12 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 13 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 14 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 15 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 16 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 17 | * 18 | *

© COPYRIGHT 2011 STMicroelectronics

19 | ****************************************************************************** 20 | */ 21 | 22 | /* Define to prevent recursive inclusion -------------------------------------*/ 23 | #ifndef __STM8S_IT_H 24 | #define __STM8S_IT_H 25 | 26 | /* Includes ------------------------------------------------------------------*/ 27 | #include "stm8s.h" 28 | 29 | /* Exported types ------------------------------------------------------------*/ 30 | /* Exported constants --------------------------------------------------------*/ 31 | /* Exported macro ------------------------------------------------------------*/ 32 | /* Exported functions ------------------------------------------------------- */ 33 | #ifdef _COSMIC_ 34 | void _stext(void); /* RESET startup routine */ 35 | INTERRUPT void NonHandledInterrupt(void); 36 | #endif /* _COSMIC_ */ 37 | 38 | #ifndef _RAISONANCE_ 39 | INTERRUPT void TRAP_IRQHandler(void); /* TRAP */ 40 | INTERRUPT void TLI_IRQHandler(void); /* TLI */ 41 | INTERRUPT void AWU_IRQHandler(void); /* AWU */ 42 | INTERRUPT void CLK_IRQHandler(void); /* CLOCK */ 43 | INTERRUPT void EXTI_PORTA_IRQHandler(void); /* EXTI PORTA */ 44 | INTERRUPT void EXTI_PORTB_IRQHandler(void); /* EXTI PORTB */ 45 | INTERRUPT void EXTI_PORTC_IRQHandler(void); /* EXTI PORTC */ 46 | INTERRUPT void EXTI_PORTD_IRQHandler(void); /* EXTI PORTD */ 47 | INTERRUPT void EXTI_PORTE_IRQHandler(void); /* EXTI PORTE */ 48 | 49 | #ifdef STM8S903 50 | INTERRUPT void EXTI_PORTF_IRQHandler(void); /* EXTI PORTF */ 51 | #endif /*STM8S903*/ 52 | 53 | #if defined (STM8S208) || defined (STM8AF52Ax) 54 | INTERRUPT void CAN_RX_IRQHandler(void); /* CAN RX */ 55 | INTERRUPT void CAN_TX_IRQHandler(void); /* CAN TX/ER/SC */ 56 | #endif /* STM8S208 || STM8AF52Ax */ 57 | 58 | INTERRUPT void SPI_IRQHandler(void); /* SPI */ 59 | INTERRUPT void TIM1_CAP_COM_IRQHandler(void); /* TIM1 CAP/COM */ 60 | INTERRUPT void TIM1_UPD_OVF_TRG_BRK_IRQHandler(void); /* TIM1 UPD/OVF/TRG/BRK */ 61 | 62 | #ifdef STM8S903 63 | INTERRUPT void TIM5_UPD_OVF_BRK_TRG_IRQHandler(void); /* TIM5 UPD/OVF/BRK/TRG */ 64 | INTERRUPT void TIM5_CAP_COM_IRQHandler(void); /* TIM5 CAP/COM */ 65 | #else /*STM8S208, STM8S207, STM8S105 or STM8S103 or STM8AF52Ax or STM8AF62Ax or STM8A626x*/ 66 | INTERRUPT void TIM2_UPD_OVF_BRK_IRQHandler(void); /* TIM2 UPD/OVF/BRK */ 67 | INTERRUPT void TIM2_CAP_COM_IRQHandler(void); /* TIM2 CAP/COM */ 68 | #endif /*STM8S903*/ 69 | 70 | #if defined (STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8S105) || \ 71 | defined(STM8S005) || defined (STM8AF52Ax) || defined (STM8AF62Ax) || defined (STM8AF626x) 72 | INTERRUPT void TIM3_UPD_OVF_BRK_IRQHandler(void); /* TIM3 UPD/OVF/BRK */ 73 | INTERRUPT void TIM3_CAP_COM_IRQHandler(void); /* TIM3 CAP/COM */ 74 | #endif /*STM8S208, STM8S207 or STM8S105 or STM8AF52Ax or STM8AF62Ax or STM8A626x */ 75 | 76 | #if defined (STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8S103) || \ 77 | defined(STM8S003) || defined (STM8AF52Ax) || defined (STM8AF62Ax) || defined (STM8S903) 78 | INTERRUPT void UART1_TX_IRQHandler(void); /* UART1 TX */ 79 | INTERRUPT void UART1_RX_IRQHandler(void); /* UART1 RX */ 80 | #endif /*STM8S208, STM8S207, STM8S903 or STM8S103 or STM8AF52Ax or STM8AF62Ax */ 81 | 82 | INTERRUPT void I2C_IRQHandler(void); /* I2C */ 83 | 84 | #if defined(STM8S105) || defined(STM8S005) || defined (STM8AF626x) 85 | INTERRUPT void UART2_RX_IRQHandler(void); /* UART2 RX */ 86 | INTERRUPT void UART2_TX_IRQHandler(void); /* UART2 TX */ 87 | #endif /* STM8S105 or STM8AF626x */ 88 | 89 | #if defined(STM8S207) || defined(STM8S007) || defined(STM8S208) || defined (STM8AF52Ax) || defined (STM8AF62Ax) 90 | INTERRUPT void UART3_RX_IRQHandler(void); /* UART3 RX */ 91 | INTERRUPT void UART3_TX_IRQHandler(void); /* UART3 TX */ 92 | #endif /*STM8S207, STM8S208, STM8AF62Ax or STM8AF52Ax */ 93 | 94 | #if defined(STM8S207) || defined(STM8S007) || defined(STM8S208) || defined (STM8AF52Ax) || defined (STM8AF62Ax) 95 | INTERRUPT void ADC2_IRQHandler(void); /* ADC2 */ 96 | #else /*STM8S105, STM8S103 or STM8S903*/ 97 | INTERRUPT void ADC1_IRQHandler(void); /* ADC1 */ 98 | #endif /*STM8S207, STM8S208, STM8AF62Ax or STM8AF52Ax */ 99 | 100 | #ifdef STM8S903 101 | INTERRUPT void TIM6_UPD_OVF_TRG_IRQHandler(void); /* TIM6 UPD/OVF/TRG */ 102 | #else /*STM8S208, STM8S207, STM8S105 or STM8S103 or STM8AF62Ax or STM8AF52Ax or STM8AF626x */ 103 | INTERRUPT void TIM4_UPD_OVF_IRQHandler(void); /* TIM4 UPD/OVF */ 104 | #endif /*STM8S903*/ 105 | INTERRUPT void EEPROM_EEC_IRQHandler(void); /* EEPROM ECC CORRECTION */ 106 | #endif /* _RAISONANCE_ */ 107 | 108 | #endif /* __STM8S_IT_H */ 109 | 110 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 111 | -------------------------------------------------------------------------------- /target/target.s19: -------------------------------------------------------------------------------- 1 | S01400007461726765742F7461726765742E736D3868 2 | S123848012010001FF00000811223344556600000001090212000101008032090401000177 3 | S10E84A0000000000705810308000A2B 4 | S12384AEAE03FF9490CE84ABAE84ADF62720A5602717BF04EE03BF07BE04EE0190F6F75C76 5 | S12384CE905C90B30726F5BE041C000520DDAE00002002F75CA3000A26F9AE01002002F7A2 6 | S12384EE5CA3014126F9CD84F920FE9B35FF500335FF500835FF500D35FF501235FF501732 7 | S123850E35FF501C725F500D725F500E353F500C725F500A725F5002725F5000725F5003E9 8 | S123852E725F5004725F50C64B004B00AE01B4CD8891721E50C7854B00AE03E8894B005FFB 9 | S123854ECD891A5B044B024B004B01AE0101CD893E5B03A660CD89B3A606CD89C0AE000431 10 | S123856ECD8A01AE0401CD899D9AAEA120CF0102AE0007CF0100CE0100BF00CE0102BF026B 11 | S123858ECE01021D0001CF01022407CE01005ACF0100BE0226E0BE0026DC35FF500235FFA4 12 | S12385AE500035FF500335FF5004CD882620FB893540500A35FF500D35FF500E35FF500CA9 13 | S12385CEA6806B01A65A6B0235020140965CCF012ECD81A19D9D9D9D9D9D725F500E725F85 14 | S12385EE500D353F500C8581893540500A35FF500D35FF500E35FF500CA6806B01A6D26BB6 15 | S123860E0235020140965CCF012ECD81A19D9D9D9D9D9D725F500E725F500D353F500C858F 16 | S123862E81C60131A02D2723A01E2603CC8706A00F2603CC8714A00F271BA05A275CA00FFC 17 | S123864E27F1A00F270A725F01048135010104813503010481C60105A10226363540500AA5 18 | S123866E35FF500D35FF500E35FF500CAE011B55012B0140CF012ECD81A19D9D9D9D9D9D0E 19 | S123868E725F500E725F500D353F500C350301052003CD85BD3502010481C601044A2658DB 20 | S12386AE550130010A550131010B550132010C550133010D550134010E550135010F5501CE 21 | S12386CE36011055013701115501380112550139011355013A011455013B011555013C017F 22 | S12386EE1655013D011755013E011855013F0119CD85F63501010581C60104A1032607CDDD 23 | S123870E85F6725D010581895204AEFFFF1F030F01203C1E05F65C1F055F97011804011898 24 | S123872E03011F03A6086B02201C7B04A5012712040306047B04A8016B047B03A8A06B0370 25 | S123874E2004040306047B020A024D26DD0C017B01110925BE1E03531F031E057B04F75CE8 26 | S123876E1F057B03F75B06818989A64B6B01CC881CA108252E350C012B3580011B7B01C710 27 | S123878E011CA6026B025F16039790F6905C1703D7011B0C027B02A10A25EB7B07A0086B2C 28 | S12387AE07203CAB04C7012B3580011B7B01C7011CA6026B0220137B025F16039790F69087 29 | S12387CE5C1703D7011B0C027B025F977B07905F9097BF0472A9000290B3042CDA0F07C6FC 30 | S12387EE012BA00488AE011DCD8715847B01A14B2604A6C32002A64B6B0135020105200778 31 | S123880EC60104A102260EC60105A10227F27B072703CC877F5B0481C601054A2650C6016B 32 | S123882E0C2727A0802647C6010DA1062640C6010FA10126074B12AE84802009A102262E8A 33 | S123884E4B09AE8492CD87768481C6010DA105261D55010E01063504012B3580011B354B41 34 | S123886E011C725F011D725F011E35020105818080808080808080808080808080808080AC 35 | S123888E808080895204AE04911F03C650C36B017B054A262D721250C57B09270672145080 36 | S12388AEC52004721550C57B06C750C420035A1F03720150C5041E0326F41E0326170F02F0 37 | S12388CE20177B092706721450C52004721550C57B06C750C4A6016B027B0A260C7B01A1FF 38 | S12388EEE12606721150C0201E7B0A260C7B01A1D22606721750C0200E7B0A260A7B01A11D 39 | S123890EB42604721150C17B025B0681897B06C752627B07C752639EC752609FC75261C6FB 40 | S123892E5250A48F1A05C752507B08C752648581899E4D26147B07887B06977B0395CD8A88 41 | S123894E11847B06CD89CD20447B01A10126147B07887B06977B0395CD8A41847B06CD89E8 42 | S123896EDA202AA10226147B07887B06977B0395CD8A71847B06CD89E720127B07887B06E8 43 | S123898E977B0395CD8AA1847B06CD89F48581899F4D27069ECA525420067B0143C45254CF 44 | S12389AEC75254858188C65252A48F1A01C75252848188C65252A4F81A01C75252848188E1 45 | S12389CEC65258A4F31A01C75258848188C65259A4F31A01C75259848188C6525AA4F31A20 46 | S12389EE01C7525A848188C6525BA4F31A01C7525B8481899F43C752557B0143A41EC75253 47 | S1238A0E568581897211525C887B0697A610429F1A036B01C65258A40C1A01C752587B0245 48 | S1238A2E27067212525C20047213525C7210525C5B0381897219525C887B0697A610429F66 49 | S1238A4E1A036B01C65259A40C1A01C752597B022706721A525C2004721B525C7218525C52 50 | S1238A6E5B0381897211525D887B0697A610429F1A036B01C6525AA40C1A01C7525A7B025D 51 | S1238A8E27067212525D20047213525D7210525D5B0381897219525D887B0697A610429F02 52 | S1238AAE1A036B01C6525BA40C1A01C7525B7B022706721A525D2004721B525D7218525DEB 53 | S1068ACE5B0381C2 54 | S1238000820084AE8200887E8200887F8200888082008881820088828200888382008884DB 55 | S123802082008885820088868200887D8200887D820088878200888882008329820088892B 56 | S12380408200888A8200887D8200887D8200888B8200888C8200888D8200887D8200887DAA 57 | S12380608200888E8200888F820088908200887D8200887D8200887D8200887D8200887D8E 58 | S12380809D9D4A26589D9D9D7253500A9D9DA606204B9D9D9D9D4A26519D9D9D7253500A68 59 | S12380A09D9DA60620449D9D9D4A264A9D9D9D9D7253500A9DA606203D9D9D9D9D9D4A2627 60 | S12380C0439D9D9D7253500A9D9DA60620369D9D7625AD7253500AA6069D9D9D9D7625B417 61 | S12380E07253500AA6069D9D9D9D7625BB7253500AA6069D9D9D7625C29D7253500AA60680 62 | S12381009D9D9D9D7625417253500AA6069D9D9D9D7625487253500AA6069D9D9D9D76250F 63 | S12381204F7253500AA6069D9D7625579D9D7253500AA6065C725A014026959D9D9D725F24 64 | S1238140500A819D9D9D9D9D9D9D4A26C49D9D9D7253500A9D9DA60620B79D9D9D9D4A262A 65 | S1238160BD9D9D9D7253500A9D9DA60620B09D9D4A26B69D9D9D9D9D7253500AA60620A98D 66 | S12381809D9D9D4A26AE725A01409D5C9DA6069D7253500A9D725D01402704AC0080D020E7 67 | S11281A09BCE012EA640C7500AA606AC0080D085 68 | S1238280906314040190F62604AC00830C18016B019D906314040190F6277118016B015CB6 69 | S12382A09D906314040190F6276218016B019D9D906314040190F6275318016B019D906322 70 | S12382C014040190F6274518016B019D906314040190F6273718016B010A02272F9063148F 71 | S12382E0040190F6272618016B019D906314040190F6271818016B01F7799063140401901E 72 | S1238300F6270918016B0120899D9D9D8484C7012DCD862F725F500F35FB52557211525083 73 | S1238320725F525E725F525F80AE833772BB525EA383592401FC809D9D9D9D9D9D9D9D9DCC 74 | S12383409D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9DAE013090AE500B4C 75 | S10D8360A60E88A68088AC00828077 76 | S10684AB84AE0098 77 | S903FFFFFE 78 | -------------------------------------------------------------------------------- /utility/macros.c: -------------------------------------------------------------------------------- 1 | /* 2 | * File: macros.c 3 | * Date: 09.01.2012 4 | * Denis Zheleznjakov @ ZiBlog.ru 5 | */ 6 | 7 | #include "main.h" 8 | 9 | static volatile uint16_t delay_count; 10 | static volatile _Bool delay_flag; 11 | static volatile uint16_t random; 12 | static _Bool is_ready; 13 | 14 | void synchronization_10ms_refresh(void) 15 | { 16 | static uint8_t counter_0_5_ms; 17 | 18 | if (is_ready == FALSE) 19 | { 20 | if (++counter_0_5_ms >= 20) 21 | { 22 | counter_0_5_ms = 0; 23 | is_ready = TRUE; 24 | } 25 | } 26 | } 27 | 28 | _Bool time_synchronization_10ms(void) 29 | { 30 | if (is_ready == TRUE) 31 | { 32 | is_ready = FALSE; 33 | return TRUE; 34 | } 35 | 36 | return FALSE; 37 | } 38 | 39 | uint8_t get_random_byte(void) 40 | { 41 | random *= 5; 42 | random += 1; 43 | random %= 256; 44 | 45 | return (uint8_t) random; 46 | } 47 | 48 | void delay_ms(volatile uint16_t delay) 49 | { 50 | delay_count = delay << 1; 51 | delay_flag = TRUE; 52 | 53 | while (delay_flag == TRUE) 54 | { 55 | } 56 | } 57 | 58 | void delay_ms_refresh(void) 59 | { 60 | if (delay_flag == TRUE) 61 | { 62 | if (--delay_count == 0U) 63 | { 64 | delay_flag = FALSE; 65 | } 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /utility/macros.h: -------------------------------------------------------------------------------- 1 | /* 2 | * File: macros.h 3 | * Date: 28.01.2011 4 | * Denis Zheleznjakov @ ZiBlog.ru 5 | */ 6 | 7 | #ifndef MACROS_H_ 8 | #define MACROS_H_ 9 | 10 | #define BIT(NUMBER) (1UL << (NUMBER)) 11 | 12 | #define ARRAY_LENGHT(Value) (sizeof(Value) / sizeof(Value[0])) 13 | 14 | #define BYTES(value) ((uint8_t *) & (value)) 15 | 16 | #define Bit_Set(Var, BitIdx) ((Var) |= BIT(BitIdx)) 17 | #define Bit_Clr(Var, BitIdx) ((Var) &= ~BIT(BitIdx)) 18 | #define Bit_Get(Var, BitIdx) ((Var) & BIT(BitIdx)) 19 | #define Bit_Inv(Var, BitIdx) ((Var) ^= BIT(BitIdx)) 20 | #define Bit_Is_Set(Var, BitIdx) (Bit_Get(Var, BitIdx) == BIT(BitIdx)) 21 | #define Bit_Is_Clr(Var, BitIdx) (Bit_Get(Var, BitIdx) == 0x00) 22 | #define Set(FlagDef) Bit_Set(FlagDef) 23 | #define Clr(FlagDef) Bit_Clr(FlagDef) 24 | #define Get(FlagDef) Bit_Get(FlagDef) 25 | #define Inv(FlagDef) Bit_Inv(FlagDef) 26 | #define Is_Set(FlagDef) Bit_Is_Set(FlagDef) 27 | #define Is_Clr(FlagDef) Bit_Is_Clr(FlagDef) 28 | 29 | #define Bits_Set(Var, Mask) ((Var) |= (Mask)) 30 | #define Bits_Clr(Var, Mask) ((Var) &= ~(Mask)) 31 | #define Bits_Inv(Var, Mask) ((Var) ^= (Mask)) 32 | 33 | void delay_ms_refresh(void); 34 | void delay_ms(volatile uint16_t delay); 35 | uint8_t get_random_byte(void); 36 | void synchronization_10ms_refresh(void); 37 | _Bool time_synchronization_10ms(void); 38 | 39 | #endif /* MACROS_H_ */ 40 | --------------------------------------------------------------------------------