藍橋杯嵌入式通用個人筆記2(必記)

2021-09-16 12:04:59 字數 2554 閱讀 1484

//adc配置及換算

pb0對應adc1,pb0引腳可復用成adc_in8

rcc_apb2periphclockcmd(rcc_apb2periph_gpiob, enable);//使能時鐘訊號

rcc_apb2periphclockcmd(rcc_apb2periph_adc1, enable);

gpio_initstructure.gpio_mode = gpio_mode_ain;//io配置

gpio_initstructure.gpio_pin = gpio_pin_0;

gpio_init(gpiob, &gpio_initstructure);

。。。。。//adc配置

adc_cmd(adc1, enable);// 先復位校正,再開啟校正。

//有一點是需要注意的,我們在對adc校準的前,

//必須把adc使能adc_cmd(adc1, enable);

//否則將卡在校準處程式卡死。

adc_resetcalibration(adc1);

while(adc_getresetcalibrationstatus(adc1));

adc_startcalibration(adc1);

while(adc_getcalibrationstatus(adc1));

u16 get_adc(void)

adc_value=get_adc()*3.3/4096;//stm32f103rbt6的adc是精度是12位了(也就是0~4096),

因此我們讀出來的ad值資料是12位的,

用通俗的話來講就是把3.3v分成4096份。

sprintf((char *)adc_string,「get adc_value:%.2fv」,adc_value);

lcd_displaystringline(line4,adc_string);

//實時時鐘

rcc_apb1periphclockcmd(rcc_apb1periph_pwr, enable);

rcc_apb1periphclockcmd(rcc_apb1periph_bkp, enable);

rtc_setprescaler(39999);

rtc_waitforlasttask();

rtc_setcounter(233600+5560+50);

rtc_waitforlasttask();

void rtc_irqhandler(void)//rtc中斷

}void time_display(uint32_t timevar)//rtc顯示時間

thh = timevar / 3600;

tmm = (timevar % 3600) / 60;

tss = (timevar % 3600) % 60;

sprintf((char *)string2,「time: %0.2d:%0.2d:%0.2d」, thh, tmm, tss);

lcd_displaystringline(line9,string2);

}while(1) }

//串列埠通訊

乙個是串列埠1(pa9,pa10),乙個是串列埠2(pa2,pa3),

pa2->tx為傳送端,pa3->rx為接收端。

不過,我們的藍橋杯嵌入式開發板並不能直接使用串列埠1,

雖然確實有串列埠1的電路,但是它連線的確實rs232的9針串列埠上,

也就是說,我們不能直接通過usb去使用到這串列埠,

因此我們一般都用不了這個串列埠。

rcc_apb2periphclockcmd(rcc_apb2periph_gpioa, enable);

rcc_apb1periphclockcmd(rcc_apb1periph_usart2, enable);

gpio_initstructure.gpio_pin = gpio_pin_2;//pa2->tx為傳送端

gpio_initstructure.gpio_mode = gpio_mode_af_pp;

gpio_initstructure.gpio_speed = gpio_speed_50mhz;

gpio_init(gpioa, &gpio_initstructure);

gpio_initstructure.gpio_pin = gpio_pin_3;//pa3->rx為接收端

gpio_initstructure.gpio_mode = gpio_mode_in_floating;

gpio_init(gpioa, &gpio_initstructure);

void usart_sendstring(uint8_t *str)//串列埠傳送資料

while(str[index] != 0);

void usart2_irqhandler(void)//中斷,串列埠接收資料

else

//中斷

//定時器

這兩個的話應該不用說了吧;畢竟上面的內容都涉及到了它們~

藍橋杯嵌入式 USART

乙個是串列埠 1 pa9,pa10 乙個是串列埠 2 pa2,pa3 我們的藍橋杯嵌入式開發板並不能直接使用串列埠 1rxbuf 是用來儲存串列埠的接收資料的,rxover 為接收串列埠結束標誌位,rxcunt 為串列埠接收計數值 ifndef usart h define usart h incl...

藍橋杯嵌入式 LCD

include stm32f10x.h include lcd.h include stdio.h u8 string 20 u8 temp 30 float ao 3.81 u32 timingdelay 0 void delay ms u32 ntime main body int main v...

藍橋杯嵌入式 RTC

bkp裡是關於備份暫存器的庫函式,pwr裡是關於電源管理的庫函式 ifndef rtc h define rtc h include stm32f10x.h void rtc init u8 hh,u8 mm,u8 ss endif include rtc.h void rtc init u8 hh...