MBED, o sobre abstracciones con fugas

mbed. – , ++, -, - . , . « » , . ++, – ?

STM Nucleo F030, . , , , . .

« ». – . , – «Hello world» – . :

#include "mbed.h"
DigitalOut myled(LED1);
int main() {
    while(1)
    {
        wait_ms(500);
        myled = myled ^ 1;
    }
}

, ? !

, «Hello world» :

#include "mbed.h"
Serial pc(USBTX, USBRX);
int main() {
    pc.printf("Hello world\n\r");
    while(1)
    {
    }
}

? « » , ? , , , , – .

. , – ! - , , 5… …

« ». . : « C++, , char* , . «foo»+«bar», , , char*. Windows LPTSTR , char* wchar_t TCHAR — , .»

, , ( «hello world» ), , , , . …

, , . , , , . ? mbed.h ?

, mbed – c , , . , , , . . , , , ( , mbed ):

  RCC_OscInitTypeDef str;
  RCC_ClkInitTypeDef clk;
    pc.printf("SystemCoreClock = %d Hz\n\r", HAL_RCC_GetSysClockFreq());
    
    HAL_RCC_GetOscConfig(&str);
    pc.printf("->HSIState %d\n\r", str.HSIState);
    pc.printf("->PLL.PLLState %d\n\r", str.PLL.PLLState);
    pc.printf("->PLL.PLLSource %d\n\r", str.PLL.PLLSource);
    pc.printf("->PLL.PLLMUL %d\n\r", str.PLL.PLLMUL);
    pc.printf("->PLL.PREDIV %d\n\r", str.PLL.PREDIV);
    pc.printf("\n\r");
    
    HAL_RCC_GetClockConfig(&clk, &flat);
    pc.printf("ClockType %d\n\r", clk.ClockType);
    pc.printf("SYSCLKSource %d\n\r", clk.SYSCLKSource );
    pc.printf("AHBCLKDivider  %d\n\r", clk.AHBCLKDivider );
    pc.printf("APB1CLKDivider %d\n\r", clk.APB1CLKDivider );


, 48 , .
, . wait_ms() :

   Timer timer;
    timer.start();
    while(1) {
        myled ^= 1;
        t1 = timer.read_ms();
        t2 = timer.read_ms();
        while (t2 - t1 < 500)
        {
            t2 = timer.read_ms();
        }
    }


, ? - 5 …

, , , , , , , . , …

STM F030 TIM1, , . .

, . , , ? :

pc.printf("PSC: %d\n\r", TIM1->PSC);


! , : 7. PSC (? ?) , . . 48 , 7, 47. 7 , , , .. 8 , PLL , 6, 48 . , …
, . ? :

: SetSysClock_PLL_HSI() -> HAL_RCC_OscConfig(), HAL_RCC_ClockConfig() -> HAL_InitTick() – , .

: HAL_Init() -> HAL_InitTick() -> HAL_TIM_Base_Init() -> TIM_Base_SetConfig() -> TIMx->PSC – - HAL_InitTick PSC , …
– , STM F0 . HAL_Init()!

, HAL_InitTick(), :

    static uint32_t ticker_inited=0;  
    if(ticker_inited)return HAL_OK;
    ticker_inited=1;


. - , . , , …

, : main :

TIM1->PSC = (SystemCoreClock / 1000000) - 1;


- 1 …

, -, mbed ? ?

, , . – , . - . DS1820, . , . , – -

#include "DS1820.h"
DS1820 probe[1] = {D4}; // D4 –  ,    
probe[0].convert_temperature(DS1820::all_devices);
float temperature = probe[0].temperature('c');


, ? . :)

, . , mbed, . .

. . , .. . , . mbed DigitalInOut, GPIO . - :

bool DS1820::onewire_bit_in(DigitalInOut *pin) {
    bool answer;
    pin->output();
    pin->write(0);
    wait_us(3);                 
    pin->input();
    wait_us(10); 
    answer = pin->read();
    wait_us(45); 
    return answer;
}


«1 -> 0 -> 1» , . ? :



, , , , , 15 .

, , . . ?

, , :

    pin->output();
    t1 = timer.read_us();
    pin->input();
    t4 = timer.read_us();
    pc.printf("Time: %d us\n\r", t4-t1);


, , , 48 GPIO (- , ), mbed, ++ , ?

13 .

, 15. wait_us(10) , answer = pin->read(); , , 2 . , .

, STM GPIO. Input PullDown . , pin->mode(PullUp) pin->input() 6 .

, .

. , DS1820 , DHT21, , , . 1-wire , . , GPIO input interrupt, . mbed . , .

, . , «1 -> 0 -> 1» .

mbed . DigitalInOut, . InterruptIn, . PullDown, , , .. PullUp, PullDown , 0.

. , , , . …

. , , . , . , , . .

Source: https://habr.com/ru/post/es387299/


All Articles