本帖最后由 abend 于 2014-12-17 22:33 编辑
首先谈谈体会:
本人没有任何硬件或者MCU开发的经验,只是一个纯软件工程师,对于什么时钟,上拉下拉一窍不通。但是借助STM32CubeMX,这次只用了半天,就基本完成了自己所需要的功能的程序主体框架开发。STM32CubeMX和HAL库确实带来了强大的生产力。
目标需求:
一个类似串口数据监控和过滤的硬件功能模块,有点sniffer的意味。即在原有的串口传输路径中插入这个硬件模块,这个硬件模块应该能接入串口数据,然后处理串口数据(比如存储传入的数据、CRC校验),最后将数据通过串口再发送出去。
所以硬件板的最基本框架就是
硬件上:
2个COM口:COM A; COM B
软件上:
COM A接收数据 再次发送给COM B;
COM B接受数据 再次发送给COM A
操作全过程:
1 安装STM32CubeMX
2 安装对应STM32CubeL0 Firmware Package到STM32CubeMX
这两点已经有多位网友发帖讲解过了,我就不重复了。
3 用STM32CubeMX 创建项目,生成MDK开发的基础项目代码:
a 配置外设(针脚)
这里主要定义了USART1、 USART2、 SPI
定义SPI 是为了未来配合BlueNRG用。 USART1的缺省定义是PA9 PA10, PA9是对应Nucelo板上的CN5-1, PA10对应CN9-7。而BlueNRG要用到CN5-1脚,所以,将UART1调整到PB6 PB7。STM32CubeMX的按住Ctrl键点击针脚自动给出备用GPIO脚的功能真是神器啊,一开始没有发现,还傻乎乎的去查Data Sheet里面的
Alternate function port表,这个轻松一按,立刻搞定。
b 配置USART 参数
c 配置中断NVIC
准备采用中断方式操作串口,所以进行配置
d 指定生成MDK开发工具对应的项目代码
4 用Keil uVision5(俺是新人,还是不理解为何MDK要改这么个新名字)打开生成的项目代码 简单增加处理逻辑代码
CubeMX已经把基础代码为我们准备好,主要在USART.c中
串口时钟、GPIO pin脚定义,中断NVIC代码:
串口工作模式代码:
而我自己的新增的业务逻辑,只涉及修改两个文件:
stm32l0xx_it.c -- USART1_IRQHandler USART2_IRQHandler 增加处理逻辑
main.c -- 增加控制逻辑
调用了HAL库函数中的两个方法:
HAL_UART_Receive_IT -- 中断方式从串口接受数据
HAL_UART_Transmit -- 发送数据到串口
5 测试
再次体会到Nucleo板子的好处,USART2直接被STLink模块弄成了USB虚拟串口,只需要一个USB-TTL板接上USART1(就用了三根杜邦线连接了RX TX GND),这样两个串口都能通过USB接入电脑(我笔记本USB口不多,所以用了一个USB Hub),然后在电脑中操作读写。
USART1(USB-TTL板)在XP设备中被登记成了COM5, USART2(STLink)被登记成了COM7
用串口助手自动向两个串口发送数据,可以看到结果窗口中,每个串口都接收到了发给对方串口的数据。
横着摆好像好看一点:
6 后续工作
现在完成的只是简单的转发,后续在main.c的主控制逻辑中,可以添加诸如数据过滤,数据CRC校验,数据记录存储(不知道自己能否搞定spi驱动SD卡)。另外准备结合这次活动送的BlueNRG板子,将截获的串口通讯数据通过蓝牙发送出来,通过手机端app接收观察串口通讯数据,这也是一开始预留SPI相关GPIO pin脚的原因。