STM32外部中斷模擬UART串列埠

2021-09-26 06:39:14 字數 1512 閱讀 5815

串列埠資料幀傳送格式:1個起始位 + 8個資料位 + 1個停止位

思路:1.pa9做普通io推挽輸出,按照傳送格式用延時暫時作為該位的傳輸時間,波特率為9600

2.pa10做浮空輸入,外部共享中斷使用(可用其餘外部中斷),每接收到乙個資料就進中斷一次,迴圈接收判斷,當接收到\r\n將接收標誌置為0x8000(或為1);

//加入以下**,支援printf函式,而不需要選擇use microlib      

#if 1

#pragma import(__use_no_semihosting)             

//標準庫需要的支援函式                 

struct __file 

//重定義fputc函式 

int fputc(int ch, file *f)

#endif 

//傳送乙個位元組資料

void sendonebyte(u8 byte)

else

}txd_high();//傳送停止位

delay_us(104);

//傳送陣列最好用這個,也可傳送字串

void sendbytes(u8 *str,u8 len)    

;delay_init();

extix_init();

//測試 傳送乙個位元組

sendonebyte(0x00);

sendonebyte(0x01);

sendonebyte(0x02);

//測試傳送陣列

sendbytes(hello,5);

while(1)}}

u8 tmp;                                 //接收的資料(資料中間轉換)

u8 usart_rx_buf[usart_rec_len];//接收緩衝區

u16 usart_rx_sta=0;            //接收完成標誌

//extern sendonebyte(u8 byte);

//外部中斷初始化

void extix_init(void)

/*共享中斷接收函式*/

void exti15_10_irqhandler(void)

if((usart_rx_sta&0x8000)==0)//接收標誌為0

else}}

exti_clearitpendingbit(exti_line10);

nvic->iser[exti15_10_irqn >> 0x05] =

(uint32_t)0x01 << (exti15_10_irqn & (uint8_t)0x1f);

串列埠tx測試結果:(上電後傳送)

串列埠rx測試結果:(傳送的資料回傳)

STM32外部中斷

一 基本概念 arm coetex m3核心共支援256個中斷,其中16個內部中斷,240個外部中斷和可程式設計的256級中斷優先順序的設定。stm32目前支援的中斷共84個 16個內部 68個外部 還有16級可程式設計的中斷優先順序的設定,僅使用中斷優先順序設定8bit中的高4位。stm32可支援...

stm32外部中斷

外部中斷程式配置流程 rcc 時鐘配置 void rcc configuration void 時鐘配置 開啟各路時鐘 rcc apb2periphclockcmd rcc apb2periph usart1 rcc apb2periph gpioa rcc apb2periph afio,enab...

stm32外部中斷

好久沒玩微控制器了,最近閒著沒事想拿出來玩玩,沒想到乙個stm32的外部中斷讓我花費了兩天時間,好的的挫折啊!終於下午除錯成功,下面來說一下我的除錯之路吧!硬體就是兩個按鍵,四個led,led事共陽極接法,按鍵一端接地一端接gpio口,通過按鍵中斷控制led。程式寫好以後發現始終無法進入中斷,開始查...