本人目前正在学习江科大的STM32入门教程在学到串口发送HEX数据包的时候遇到一个问题虽然在课上老师讲的蛮清楚的但我觉得还是比较有价值和各位初学者分享一下本篇仅用作分享和加深记忆各位大佬看到忽略即可。我写完代码发现我的STM32能给电脑发送数据电脑也能正确接收但是电脑无法给STM32发送数据点击发送之后没有任何反应。我检查了代码刚开始并没有检查出来。后来发现是我的状态机的状态变量我没有设置成静态变量这个确实是我听讲不认真。因为数据的接受是一位一位的接收每一次接收都会触发一次中断处理函数而中断处理函数在前面就会把这个状态变量初始化为0所以如果只是普通的局部函数那么每一次进中断这份状态变量就会被重置为0就会一直停留在状态0不能往下进行所以STM才会接收不到数据。关于这个静态变量我的理解是它只会初始一次之后就不会再进行初始化。值会一直保留。在改正了这个错误之后我就在想除了这个静态变量的方法我能不能用其他方法达成同样的效果我想到静态变量的问题在于局域变量每次进中断就会被重置那我直接把这个状态变量设置为全局变量不就可以了么。这样就不会在每次进中断的时候被重置。结果是喜人的和我想得一样全局变量的做法是可行的。但是全局变量也有问题在目前的这种小程序中这样当然不会有什么问题。但是随着代码量的增加这一套就行不通了。首先最先带来的问题就是命名空间的确缺失。后面模块会越来越多如果都是使用全局变量那么一些常见的词比如FLAG,State等就会被抢光或者想改一个变量名就要全局搜索进行替换这样就很麻烦。其次。这样很有可能会暴雷万一你哪天不小心修改了这个变量的值那么编辑器不会报错你也很难找出这个问题。