[STM32]Visual Studio 2019 +STM32实现串口通讯详解

1.下载 免费版 Visual Studio 2019 并进行安装 https://visualstudio.microsoft.com/zh-hans/

2.双击软件创建项目



3.选择Windows窗体应用程序(.NET Framework)创建项目。

​编辑

4.项目创建完成,初始界面。

​编辑

5.选择左侧的工具栏,选择 组件,然后双击 串口组件将串口添加进入项目。

​编辑

6.开完会了继续编辑,(●'◡'●)
7.点击鼠标右键,修改串口模块的属性,包括 波特率等,本实验采用默认。
​编辑
8.双击串口模块,添加数据接收中断函数
​编辑
9.添加按钮模块,控制STM32开发板LED灯的亮灭。
​编辑
10.好的现在基本界面与模块添加完成,开始写程序,添加程序各种变量:
       //串口通讯命令
        public static byte[] SendOrder = new byte[3] { 0x5A,0x00, 0xA5 }; //中间为命令,头尾为校验  00 关灯 01开灯 02关蜂鸣器 03开蜂鸣器
        // 串口接收
        public static byte[] revcmd = new byte[3];


11. 开灯LED0程序如下:
        private void button1_Click(object sender, EventArgs e)  //开灯LED0
        {
            try
            {
                if (serialPort1.IsOpen)
                {
                    serialPort1.Close();
                }
                serialPort1.Open();  //打开串口
                serialPort1.DiscardInBuffer();//清空缓冲区数据
                SendOrder[1] = 0x01;//发送开灯命令
                serialPort1.Write(SendOrder, 0, 3);//写入串口缓冲区
            }
            catch
            {
                MessageBox.Show("请检查串口1是否打开");
            }
        }


12.关灯LED0程序如下:
        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                if (serialPort1.IsOpen)
                {
                    serialPort1.Close();
                }
                serialPort1.Open();  //打开串口
                serialPort1.DiscardInBuffer();//清空缓冲区数据
                SendOrder[1] = 0x00;//发送开灯命令
                serialPort1.Write(SendOrder, 0, 3);//写入串口缓冲区
            }
            catch
            {
                MessageBox.Show("请检查串口1是否打开");
            }
        }

13.蜂鸣器程序留给大家写,偷个懒(●'◡'●)

14.串口接收函数如下:
       private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) //串口接收中断
        {
            try
            {
                serialPort1.Read(revcmd, 0, 3); // 将接收缓冲区输入revcmd

            }
            catch
            {
                MessageBox.Show("请检查串口1是否打开");
            }
            this.Invoke(new EventHandler(ComService)); //调用事件处理函数
        }

15.串口接收数据处理函数如下:
        private void ComService(object sender, EventArgs e)
        {
            if ((revcmd[0] == 0x5A) & (revcmd[1] == 0x01) & (revcmd[2] == 0xA5))
            {
                button5.Text = "灯开了";
                button5.BackColor = Color.FromArgb(255, 0, 0); //设置控件颜色为红色
               // button5.BackColor = Color.FromKnownColor(KnownColor.LightSeaGreen);; //设置控件颜色为

            }
            if ((revcmd[0] == 0x5A) & (revcmd[1] == 0x00) & (revcmd[2] == 0xA5))
            {
                button5.Text = "灯关了";
                button5.BackColor = Color.FromArgb(224, 224, 224);//灰色
            }
        }

16.上位机程序编写完成。附件如下:

​编辑 VS2019_STM32串口通信.rar (41.29 KB)

17.下面开始写STM32开发板程序,这个比较简单,大家应该都会吧。(●'◡'●)

void USART1_IRQHandler(void)//串口1中断服务程序
{           
        u8 res;        
                USART1_StartFlag=1;        
        if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
        {
                res=USART_ReceiveData(USART1); //读接收到的字节,同时相关标志自动清除               
                if(USART1_RX_CNT<100)
                {
                        USART1_RX_BUFF[USART1_RX_CNT]=res;
                        USART1_RX_CNT++;

                        TIM_ClearITPendingBit(TIM7,TIM_IT_Update);//清除定时器溢出中断
                        TIM_SetCounter(TIM7,0);//当接收到一个新的字节,将定时器7复位为0,重新计时(相当于喂狗)
                        TIM_Cmd(TIM7,ENABLE);//开始计时
                }
        }
}

/        
//串口服务函数
void USART1RX_Service(void)
{
                if(USART1_FrameFlag==1)
                {
                                USART1_StartFlag=0;
                            USART1_FrameFlag=0;        //复位帧结束标志
                                USART1_RX_CNT=0;//接收计数器清零
                                if((USART1_RX_BUFF[0]==0x5A)&&(USART1_RX_BUFF[1]==0x00)&&(USART1_RX_BUFF[2]==0xA5))  //通讯测试  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))  //通讯测试  5A  00  A5
                                {
                                                SendBUF[0]=0x5A;
                                            SendBUF[1]=0x01;
                                            SendBUF[2]=0xA5;
                                            LED0=0;
                                            USART1_SendData(SendBUF,3);
                                       
                                }
                                
                }
}


18.单片机程序直接附上:
​编辑 VS2019_STM32通讯实验.rar (2.43 MB)

19.下面进行配置电脑,由于水平有限,本程序需要设置电脑的COM口且需要改为COM1如下图: 
或者更改VS2019中串口模块的属性,如下:
​编辑
20.下面发给小视频演示下效果:
​编辑 VS2019_STM32视频.rar (2.05 MB)
21.好的完成了,谢谢大家。
---------------------
作者:刘东君
链接:https://bbs.21ic.com/icview-3117106-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值