實驗階段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入...