平时用单片机做东西免不了要调整一些参数,特别是调 PID 参数的时候,要不停得调整参数。如果一直通过烧程序改变参数的话,难免显得繁琐。因为最近在用 K60,所以今天我稍微研究了一下怎样通过 K60 的串口通信改变参数的值。
因为时间的原因,并没有看得很深入,没怎么看 K60 的底层寄存器,代码是借助拉普兰德的库写的。所以这篇文章就不涉及寄存器方面的东西了。
拉普兰德的例程中有串口中断的例程,但 UART 库函数的功能仅限于接收一个字符,这显然是不够用的,调整参数肯定要得到一个字符串。拉普兰德的库函数里有两种方法可以通过串口通信得到一个字符串。
一种方法是使用 K60 的 FIFO 功能,这种方法我没有细看。我用的是第二种方法,使用 K60 的 DMA 功能。
现在的任务是写出一个最简单的代码,上位机通过串口发送一个字符串给单片机,单片机得到这个字符串,简单处理一下就可以赋给参数值了,现在为了测试先将这个得到的字符串发送给上位机。
因为要用到 UART 功能和 DMA 功能,先定义结构体:
void uart_init()
{
uart2_init_struct.UART_Uartx = UART2; //使用UART2
uart2_init_struct.UART_BaudRate = 19200; //设置波特率19200
uart2_init_struct.UART_RxPin = PTD2; //接收引脚为PTD2
uart2_init_struct.UART_TxPin = PTD3; //发送引脚为PTD3
uart2_init_struct.UART_RxIntEnable = 1 ;//开接收中断
uart2_init_struct.UART_TxIntEnable = 1; //使能发送中断
uart2_init_struct.UART_RxDMAEnable = TRUE; //使能接收DMA
uart2_init_struct.UART_TxDMAEnable = TRUE; //使能发送DMA
//配置接收DMA
uart_rev_dma_init_struct.DMA_CHx = DMA_CH0; //选择DMA CH0作为通道
uart_rev_dma_i