Пт май 13, 2022 09:26:00
Пт май 13, 2022 18:45:24
Вт авг 16, 2022 17:45:53
#include "STM8S103F3.h"
#define LED_PORT sfr_PORTB
#define LED_PIN PIN5
// configure LED pin as output
LED_PORT.DDR.byte = LED_PIN; // input(=0) or output(=1)
LED_PORT.CR1.byte = LED_PIN; // input: 0=float, 1=pull-up; output: 0=open-drain, 1=push-pull
LED_PORT.CR2.byte = LED_PIN; // input: 0=no exint, 1=exint; output: 0=2MHz slope, 1=10MHz slope
/** Port A data direction register (DDR at 0x5002) */
union {
/// bytewise access to DDR
uint8_t byte;
/// bitwise access to register DDR
struct {
BITFIELD_UINT DDR0 : 1; // bit 0
BITFIELD_UINT DDR1 : 1; // bit 1
BITFIELD_UINT DDR2 : 1; // bit 2
BITFIELD_UINT DDR3 : 1; // bit 3
BITFIELD_UINT DDR4 : 1; // bit 4
BITFIELD_UINT DDR5 : 1; // bit 5
BITFIELD_UINT DDR6 : 1; // bit 6
BITFIELD_UINT DDR7 : 1; // bit 7
}; // DDR bitfield
/// register _PORT_DDR reset value
#define sfr_PORT_DDR_RESET_VALUE ((uint8_t) 0x00)
} DDR;
Вт авг 16, 2022 18:31:53
Вт авг 16, 2022 18:46:54
Вт авг 16, 2022 19:28:29
да, но только со сдвигом единички, то есть, (1 << LED_PIN)То есть, для сброса бита при обращении к структуре объединения как к целому байту мне необходимо писать LED_PORT.DDR.byte &= ~(LED_PIN); ?
не знаю, как лучше с точки зрения языка. Конструкция в любом случае будет красивше, так как займёт одну строку, вместо восьми. Однако, возможно, есть алгоритм, где краисвше обратиться в цикле к каждому биту. Ещё может быть разница с точки зрения компилятора.установку битов лучше производить конструкцией типа LED_PORT.DDR.byte |= LED_PIN
обращаясь к .byte Вы обращаетесь ко всем битам,, соответсвенно. либо сбросятся, либо установятся. Обращаясь к .DDR0 - обращаетесь только к этому биту, никакие другие не будут затронуты,то все остальные биты регистра будут сбрасываться?
/** Port A data direction register (DDR at 0x5002) */
union {
.....
/// bitwise access to register DDR
struct {
BITFIELD_UINT DDR03 : 4; // bit 0...bit 3
BITFIELD_UINT DDR47 : 4; // bit 4...bit 7
}; // DDR bitfield
/// register _PORT_DDR reset value
#define sfr_PORT_DDR_RESET_VALUE ((uint8_t) 0x00)
} DDR;
Вт авг 16, 2022 19:50:30
/*----------
FOR CONVENIENT PIN ACCESS
----------*/
#define PIN0 0x01
#define PIN1 0x02
#define PIN2 0x04
#define PIN3 0x08
#define PIN4 0x10
#define PIN5 0x20
#define PIN6 0x40
#define PIN7 0x80
Ср авг 17, 2022 15:26:52
Чт окт 20, 2022 11:09:19
Чт окт 20, 2022 11:54:23
Ну надо как-то в него добавить второй АЦП, так как их там один.Proton78 писал(а):STM8S103 заставить работать АЦП2
Чт окт 20, 2022 12:44:27
Ну надо как-то в него добавить второй АЦП, так как их там один.Proton78 писал(а):STM8S103 заставить работать АЦП2
Чт окт 20, 2022 13:07:45
Вт окт 25, 2022 15:17:21
void proc(void){
while(GPIO_ReadInputPin(LATCH_PORT,LATCH_PIN)==0){}; // Ждем изменения latch
for (u8 i = 0; i < 8; i++) {
if (data & (1 << i))
dataL(); // сброс бита
else
dataH(); // установка бита
while( GPIO_ReadInputPin(CLK_PORT, CLK_PIN)==0){}; // Ждем изменения clk
}
dataH();
}
Вт окт 25, 2022 15:55:55
Вт окт 25, 2022 15:56:55
Вт окт 25, 2022 16:03:33
Здесь же фактически ждётся не изменение CLK, а только пока он равен нулю.
Первая функция сильно похожа на SPL, неужто на несчастную STM8 еще и это дерьмище вкорячили? Жуть!
void dataL(void){
GPIO_WriteLow(DATA_PORT, DATA_PIN);
}
void dataH(void){
GPIO_WriteHigh(DATA_PORT, DATA_PIN);
}
Вт окт 25, 2022 16:18:40
Вт окт 25, 2022 16:19:52
Вт окт 25, 2022 16:28:24
Вт окт 25, 2022 16:30:07