STM32串列埠實驗

2022-03-07 20:27:52 字數 2489 閱讀 4952

實驗階段1,定時器計時1s觸發中斷,在中斷中往外傳送資料

定時器設定為36000分頻,週期設定為2000,並開啟中斷,配置**如下

tim_timebase_struct.tim_countermode =tim_countermode_up;

tim_timebase_struct.tim_clockdivision =tim_ckd_div1;

tim_timebase_struct.tim_prescaler =debug_uart_tx_tim_psc;

tim_timebase_struct.tim_period =debug_uart_tx_tim_period;

tim_timebaseinit(debug_uart_tx_tim, &tim_timebase_struct);

tim_cmd(debug_uart_tx_tim, enable);

tim_itconfig(debug_uart_tx_tim, tim_it_update, enable);

串列埠配置與pc端除錯助手設定一致即可,一般都配置為無硬體流控,無奇偶校驗,1位停止位,八位資料位

usart_struct.usart_mode = usart_mode_tx |usart_mode_rx;

usart_struct.usart_hardwareflowcontrol =usart_hardwareflowcontrol_none;

usart_struct.usart_parity =usart_parity_no;

usart_struct.usart_stopbits =usart_stopbits_1;

usart_struct.usart_wordlength =usart_wordlength_8b;

usart_struct.usart_baudrate =debug_uart_baudrate;

usart_init(debug_uart, &usart_struct);

usart_cmd(debug_uart, enable);

中斷服務函式中還是常規的檢測中斷標誌位然後清除中斷標誌位

void debug_uart_tx_tim_irq_handler(void

)}

串列埠傳送函式使用了輸出流重定向,需要在魔術棒配置中勾選使用微庫(use microlib)

int fputc(int ch, file*stream)

實驗階段2,通過按鍵觸發外部中斷的方式來產生一次資料傳送,按鍵gpio配置為一般輸出,下拉即可,並且需要呼叫乙個函式將gpio連線到exti

gpio_struct.gpio_mode =gpio_mode_in;

gpio_struct.gpio_pupd =gpio_pupd_down;

gpio_struct.gpio_speed =gpio_speed_level_1;

gpio_struct.gpio_pin =pushbutton_pin;

gpio_init(pushbutton_gpio, &gpio_struct);

syscfg_extilineconfig(pushbutton_exti_portsource, pushbutton_exti_pinsource);

本實驗使用的是st官方的nucleo開發板,mcu型號為stm32f303re,使用標準庫開發,串列埠的gpio配置如下

gpio_struct.gpio_mode =gpio_mode_af;

gpio_struct.gpio_otype =gpio_otype_pp;

gpio_struct.gpio_pupd =gpio_pupd_nopull;

gpio_struct.gpio_speed =gpio_speed_level_1;

gpio_struct.gpio_pin = debug_uart_tx |debug_uart_rx;

gpio_init(debug_uart_gpio, &gpio_struct);

gpio_pinafconfig(debug_uart_gpio, debug_uart_tx_pinsource, gpio_af_7);

gpio_pinafconfig(debug_uart_gpio, debug_uart_rx_pinsource, gpio_af_7);

中斷服務函式如下

void pushbutton_irq_handler(void

)}

該實驗功能點有乙個明顯bug,即外部中斷可能會連續觸發,導致一次按鍵可能導致重**送資料

---***---該bug為硬體消抖做的不好所致,在官方的nucleo64開發板上有bug,但在野火mini板上執行ok

實驗階段3,做乙個接受回傳的功能,開啟串列埠中斷,在中斷中將收到的資料進行回傳

void debug_uart_irq_handler(void

)}

STM32串列埠實現1 wire(一)

只需要將stm32的串列埠的tx線和18b20的dq相連線,通過4.7k上拉電阻讓tx線拉到3.3v即可 ps 就不貼圖了 配置串列埠2 void ds18b20 init 只配置了tx管腳,使能單線半雙工模式 usart halfduplexcmd函式 復位18b20,返回0 找到裝置,裝置響應。...

STM32實驗7 串列埠應用

接收紅外遙控器的按鍵訊號,把按鍵訊號發射到pc機上顯示 接收並解碼紅外按鍵訊號 串列埠printf顯示 可參考stm32例程 15 a d printf.h 總之,uart就是乙個可以接收 傳送位元組的功能模組。紅外遙控原理介紹 紅外遙控器採用載波的方式傳送二進位制編碼,常用的載波頻率為38khz....

stm32串列埠通訊

通訊方式 1 同步通訊 帶時鐘同步訊號傳輸 spi,iic等 2 非同步通訊 不帶時鐘用途訊號 usrt,單匯流排 stm32串列埠引腳表 串口號 rxd txd 1 pa10 pa9 2 pa3pa2 3 pb11 pb10 4 pc11 pc10 5 pd2pc12 通訊過程 接收過程 由rx入...