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};
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.
. , , , . …
. , , . , . , , . .