1-1下载软件及其点个灯
下载链接:https://pan.baidu.com/s/1r1oMmlU6fWibSJjY0G41zg?pwd=o1pr
提取码:o1pr
第一次进入软件需要自己注册账号下载固件。
基本的点灯操作:Output Push Pull
推挽输出的定义:在stm32的控制下,向外输出0v的低电平或者3.3v的高电平。
保存——自动生成代码(齿轮)——跳转到c++界面(在SCR的文件夹下main.c文件中)——编译(小锤子,可自动编译,需设置)——烧录代码(小绿键)
1-2炫彩小灯及其部分解析
大星星,收藏快速建立工程。
代码写在生成的一对begin和end中间,代码在更新的时候有所保留。
HAL_GPIO_WritePin(,,GPIO_PIN_SET)//高电平
HAL_GPIO_WritePin(,,GPIO_PIN_RESET)//低电平
1s等于1000ms。
Enter User Label每个状态进行编号,定义用户的标签。
定义状态计数器变量。
HAL_GPIO_WritePin(LED_BLUE_GPIO_Port,LED_BLUE_Pin,GPIO_PIN_RESET);//LED_BLUE 是用户标签。
HAL_Delay()//延时。
末尾状态值加一,并且重置。
1-3、串口的轮询模式
程序必须等待发送或者接收结束,才能接着执行;只能接收确定长度的数据。
底层机制:
CPU不停地查询发送数据寄存器中的数据是否已经移送到发送移位寄存器(转换为高低电平发送出去)。
接收一样。CPU一直处于忙碌状态下,一直等待使程序暂时无法向下执行的状态叫做“堵塞”。
1-4、STM32串口原理与串口中断模式收发
通过串口,成功解决串口操作一直占用CPU的问题。
使用串口的中断模式解决程序等待问题。原理就是CPU只要将数据塞到寄存器中就可以去处理其他的事件,只有当发送移位寄存器发送完后,会把CPU叫回来,CPU再将数据存入发送数据寄存器,以此反复。
配置界面:
HAL_UART_Transmit_IT函数:中断发送函数。
HAL_UART_Receive_IT(&huart2, ReceiveDate, 2):中断接收函数,由于没有堵塞程序的执行,没等到接收到数据,就直接执行下去了。执行下次循环的时候,可能上次的数据没有接收完,又执行开启串口中断接收,故放在循环前。怎么知道什么时候接收完成,接收完后就可以进行分析:使用中断处理函数,直到接收到了我们设定的数据长度,完成本次接收。
//由于没有堵塞程序的执行,没等到接收到数据,就直接执行下去了�?�执行下次循环的时�?�,可能上次的数据没有接收完,又执行�?启串口中断接收,故放在循环前�?
每一个usart只有一个中断向量,需要简单的判断才能确定当前是什么原因触发的中断,但不需要自己写。有callback回调函数机制:当有什么事情发生时,就会调用这个函数。(弱定义,可以在其他地方重新定义这个函数)__weak void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)。Cplt:complete接收完成时执行。将代码写在回调函数中,将接收到数据执行的逻辑剪切到回调函数里。处理完一次中断处理回调函数后,为下次接收启动串口中断接收。
总结:
将逻辑移入oid HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)。