本帖最后由 youxia 于 2018-8-12 11:45 编辑 # j5 P B* D6 q& E* P0 d 3 L( C- l) _/ T- O8 C3 [ 本人最近学习使用STM32F722ZE的nucleo板。说实话,这块板子上没有焊接网络模块,下方的USB口也不是安卓机的USB口。虽然这块板子有很多不足,但这些并不影响我们发挥创造力。本人使用板子上的USART3,通过空闲中断+DMA实现自动不定长收收发数据,并在此基础上编写了一个交互式的函数调试小软件。- @" q2 m5 S n, | 这个小软件可以让用户通过输入函数来灵活调用单片机的函数,参数可以是整型或浮点数。整数支持十进制和十六进制,浮点数只支持十进制,可以为正数和负数。暂不支持指针。对于错误的输入可以自动检测出来并作出提示。输入的字节数最大为3*1024字节,最大支持带5个参数的函数。串口的波特率为115200.# W- X/ \9 _5 O0 @ 实际效果如下: 附件如下: |
先说一下程序中用到的两个结构定义,如下图所示。
1 `/ G+ c( c+ m \& E
程序基本上围绕这两个结构的数据展开。2 j6 k5 j; r4 @+ h- g: f, f( ~# k
实际使用中的function_list如下:. u4 |; G2 t1 c& e" C' @
先是设置开启USART3和其DMA,开启串口空闲中断。串口在接收到完整的数据后一定时间再无数据接收,触发串口空闲中断。中断函数如下:8 L/ p' t% Z/ `+ R& m; `
接着在main()的while(1)循环中调用Command_Handle();* a, I' J6 P' J2 B
在Command_Handle()函数中通过recive_command.recive_complete判断是否有字符接收。
要说明一点的是,STM32F7自带FPU,为此一般情况下在写程序时会开启这个FPU,但是本程序是通过指针来进行参数的转换和传递,开启FPU会使得浮点数的指针混乱,为此一定要在软件中关闭FPU功能。