stm32F103—串口与中断相结合实现串口改变计数值

                                                                                                                  串口与中断的小结合

                         通过上一篇的讲解,我们下面来实现每按一下灯实现计数,并且从串口输入数字改变计数值,然后接着串口输入的值来继续往后计数实现一下要求:

                         (1)记录开发板上按键KEY1的闭合次数,即每按一次按键,计数加1。
                         (2)要求具有按键防抖功能,通过中断方式实现按键计数;
                         (3)能够把计数值通过串口显示到PC上;
                         (4)能够通过PC串口发送数据给开发板修改计数值,要求串口利用中断方式接收数据;
                         (5)同时要求LED1灯进行闪烁变化,要求每按一次按键灯的状态与前一次相反,

                                例如第一按键LED1点亮,第二次按键LED1熄灭,第三次点亮,第四次熄灭。

                          首先我们看到要求提到要用key1来控制小灯的亮灭,我之前的篇章中已经讲到任何查看按键,所以我们可以知道stm32F103是GPIOE3控制key1,

                          其次我们看到要求通过中断方式实现防抖和按键计数,并且把计数值通过串口显示到PC上

                           (1)我们需要在led.c的文件中初始化GPIOE3的按键

                           

                           (2)我们需要将防抖和按键计数放在中断中

                            extern是可以在整个项目中可以使用的,而static是局部静态变量,因为我们要实现之后的从串口接收数据并且改变值,

                           所以我们需要在串口的文件中调用,需要在main函数的开始声明,才可以在整个文件中使用

                                                         

                           

                            画线的为关键的语句,实现检测GPIOE3是否按下,以及LED1的反置,计数值的增加,最为重要的是需要清除中断标志位,不然会进入中断循环

                                    (3)从串口接收数据并实现并且改变计数值,然后继续计数

                                             

                            改变以上数值即可实现led计数并且从PC输出,从串口接收数据,然后改变计数值,继续计数

                              

                                以下为硬件连接图:

                                   前面三根线和之前跑马灯的线连接是一样的,因为我们需要运用到led1灯,后面橙色的线连接RXD连接第二图的3位置PA10(TXD),

                               黄色的线TXD连接第二图的2位置PA9(RXD),绿色接GND的线接到板子任意的接地就好了,在图二中的1位置GND

                        

                                                                                          

                                   当硬件连接好时,将程序下到板子里后打开串口工具就可以看见下图,当选择串口号COM3(在计算机的设备管理器中查看串口号),

                              波特9600,并且打开后,连续按下key1时便会显示出(由于我在打开串口前按了一下按键,所以数字从2开始)02,03,04,05,然后

                              我往下面窗口输入10之后,按发送,它最左下角出现发送成功,说明串口已经接收数据,最后再继续按按键时,计数就从10开始往后

                              加一(别忘记,给串口发送东西时要以16进制发送)

                                                            

                                               因为在程序里面你从串口获取数据是用USART_ReceiveData()的函数,而它的返回值便是与16进制的01FF相与,

                                        所以我们要用16进制数来发送。                                               

                                                

                         




  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值