1.下載 免費(fèi)版 Visual Studio 2019 并進(jìn)行安裝visualstudio.microsoft.com/zh-hans/
2.雙擊軟件創(chuàng)建項(xiàng)目
3.選擇Windows窗體應(yīng)用程序(.NET Framework)創(chuàng)建項(xiàng)目。
4.項(xiàng)目創(chuàng)建完成,初始界面。
5.選擇左側(cè)的工具欄,選擇 組件,然后雙擊 串口組件將串口添加進(jìn)入項(xiàng)目。
6.點(diǎn)擊鼠標(biāo)右鍵,修改串口模塊的屬性,包括 波特率等,本實(shí)驗(yàn)采用默認(rèn)。
7.雙擊串口模塊,添加數(shù)據(jù)接收中斷函數(shù)
8.添加按鈕模塊,控制STM32開(kāi)發(fā)板LED燈的亮滅。
9.好的現(xiàn)在基本界面與模塊添加完成,開(kāi)始寫(xiě)程序,添加程序各種變量:
//串口通訊命令 public static byte[] SendOrder = new byte[3] { 0x5A,0x00, 0xA5 }; //中間為命令,頭尾為校驗(yàn) 00 關(guān)燈 01開(kāi)燈 02關(guān)蜂鳴器 03開(kāi)蜂鳴器 // 串口接收 public static byte[] revcmd = new byte[3];
10. 開(kāi)燈LED0程序如下:
private void button1_Click(object sender, EventArgs e) //開(kāi)燈LED0 { try { if (serialPort1.IsOpen) { serialPort1.Close(); } serialPort1.Open(); //打開(kāi)串口 serialPort1.DiscardInBuffer();//清空緩沖區(qū)數(shù)據(jù) SendOrder[1] = 0x01;//發(fā)送開(kāi)燈命令 serialPort1.Write(SendOrder, 0, 3);//寫(xiě)入串口緩沖區(qū) } catch { MessageBox.Show("請(qǐng)檢查串口1是否打開(kāi)"); } }
11.關(guān)燈LED0程序如下:
private void button2_Click(object sender, EventArgs e) { try { if (serialPort1.IsOpen) { serialPort1.Close(); } serialPort1.Open(); //打開(kāi)串口 serialPort1.DiscardInBuffer();//清空緩沖區(qū)數(shù)據(jù) SendOrder[1] = 0x00;//發(fā)送開(kāi)燈命令 serialPort1.Write(SendOrder, 0, 3);//寫(xiě)入串口緩沖區(qū) } catch { MessageBox.Show("請(qǐng)檢查串口1是否打開(kāi)"); } }
12.蜂鳴器程序留給大家寫(xiě),偷個(gè)懶(●'?'●)
13.串口接收函數(shù)如下:
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) //串口接收中斷 { try { serialPort1.Read(revcmd, 0, 3); // 將接收緩沖區(qū)輸入revcmd } catch { MessageBox.Show("請(qǐng)檢查串口1是否打開(kāi)"); } this.Invoke(new EventHandler(ComService)); //調(diào)用事件處理函數(shù) } 15.串口接收數(shù)據(jù)處理函數(shù)如下: private void ComService(object sender, EventArgs e) { if ((revcmd[0] == 0x5A) & (revcmd[1] == 0x01) & (revcmd[2] == 0xA5)) { button5.Text = "燈開(kāi)了"; button5.BackColor = Color.FromArgb(255, 0, 0); //設(shè)置控件顏色為紅色 // button5.BackColor = Color.FromKnownColor(KnownColor.LightSeaGreen);; //設(shè)置控件顏色為 } if ((revcmd[0] == 0x5A) & (revcmd[1] == 0x00) & (revcmd[2] == 0xA5)) { button5.Text = "燈關(guān)了"; button5.BackColor = Color.FromArgb(224, 224, 224);//灰色 } }
14.上位機(jī)程序編寫(xiě)完成。
15.下面開(kāi)始寫(xiě)STM32開(kāi)發(fā)板程序,這個(gè)比較簡(jiǎn)單,大家應(yīng)該都會(huì)吧。(●'?'●)
void USART1_IRQHandler(void)//串口1中斷服務(wù)程序{ u8 res; USART1_StartFlag=1; if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET) { res=USART_ReceiveData(USART1); //讀接收到的字節(jié),同時(shí)相關(guān)標(biāo)志自動(dòng)清除 if(USART1_RX_CNT<100) { USART1_RX_BUFF[USART1_RX_CNT]=res; USART1_RX_CNT++; TIM_ClearITPendingBit(TIM7,TIM_IT_Update);//清除定時(shí)器溢出中斷 TIM_SetCounter(TIM7,0);//當(dāng)接收到一個(gè)新的字節(jié),將定時(shí)器7復(fù)位為0,重新計(jì)時(shí)(相當(dāng)于喂狗) TIM_Cmd(TIM7,ENABLE);//開(kāi)始計(jì)時(shí) } }} ///////////////////////////////////////////////////////////////////////////////////// //串口服務(wù)函數(shù)void USART1RX_Service(void){ if(USART1_FrameFlag==1) { USART1_StartFlag=0; USART1_FrameFlag=0; //復(fù)位幀結(jié)束標(biāo)志 USART1_RX_CNT=0;//接收計(jì)數(shù)器清零 if((USART1_RX_BUFF[0]==0x5A)&&(USART1_RX_BUFF[1]==0x00)&&(USART1_RX_BUFF[2]==0xA5)) //通訊測(cè)試 5A 00 A5 { SendBUF[0]=0x5A; SendBUF[1]=0x00; SendBUF[2]=0xA5; LED0=1; USART1_SendData(SendBUF,3); } if((USART1_RX_BUFF[0]==0x5A)&&(USART1_RX_BUFF[1]==0x01)&&(USART1_RX_BUFF[2]==0xA5)) //通訊測(cè)試 5A 00 A5 { SendBUF[0]=0x5A; SendBUF[1]=0x01; SendBUF[2]=0xA5; LED0=0; USART1_SendData(SendBUF,3); } }}
16.下面進(jìn)行配置電腦,由于水平有限,本程序需要設(shè)置電腦的COM口且需要改為COM1如下圖:
或者更改VS2019中串口模塊的屬性,如下:
17.好的完成了,謝謝大家。
編輯:jq
-
led
+關(guān)注
關(guān)注
242文章
23297瀏覽量
661361 -
STM32
+關(guān)注
關(guān)注
2270文章
10904瀏覽量
356417 -
串口通信
+關(guān)注
關(guān)注
34文章
1626瀏覽量
55563 -
Com
+關(guān)注
關(guān)注
1文章
107瀏覽量
40654
原文標(biāo)題:Visual Studio 2019 +STM32實(shí)現(xiàn)串口通訊
文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論