完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1、背景
上周完成了基本测试以后,发现了一个问题,串口虽然好用,但是现在的计算机支持力度不够好,另外,速度也慢,楼主想尽量把它做完善一点,用USB2.0, 115200以上的中速实现MLX90640红外数据传输,来重新实现这个32*24的红外测温硬件,经过一天努力,终于做好了,整体效果如下。 2、USB 驱动 对于这个东西,USB的驱动还是比较容易的,首先打开STM32CUBEMX, 选择USB设备,MIDDLEWARE中选择USB,选CDC,其他我都默认的,然后就是安装驱动包,测试,正常通过~ 3、USB 驱动程序 接下来详细讲下怎么实现下位机的,为了实现USB版本的程序,我主要做了两件事, 其一,去官方下载了MLX90640的开发包文件mlx90640-library-master.zip,解压后,发现其实这个是提供了两个版本的,要筛检,MLX90640_I2C_Driver.h对应的两个C文件,一个是硬件IIC,一个是模拟IIC,大家都知道,STM32F103是模拟的IIC, 所以,我选择了MLX90640_SWI2C_Driver.cpp, 改为MLX90640_SWI2C_Driver.c,然后建立了工程如下图: 最难的一步到了,就是改配置:找到MLX90640_i2c_driver.h,修改IIC的那些宏变量段落,否则程序就找不到北了,甚至连个IICStart()都启动不起来,由于我的是F103的,GBIOB的变量里没有那么多高级货,我就直接按照标准库的例子开始一个函数一个函数对应修改了,基本如下: #define SCL_PIN GPIO_PIN_6 #define SCL_GPIO_PORT GPIOB #define SDA_PIN GPIO_PIN_7 #define SDA_GPIO_PORT GPIOB #define SCL_HIGH HAL_GPIO_WritePin(SCL_GPIO_PORT , SCL_PIN, GPIO_PIN_SET) #define SCL_LOW HAL_GPIO_WritePin(SCL_GPIO_PORT , SCL_PIN, GPIO_PIN_RESET) #define SDA_HIGH HAL_GPIO_WritePin(SDA_GPIO_PORT , SDA_PIN, GPIO_PIN_SET) #define SDA_LOW HAL_GPIO_WritePin(SDA_GPIO_PORT , SDA_PIN, GPIO_PIN_RESET) #define SCL_read HAL_GPIO_ReadPin(SCL_GPIO_PORT , SCL_PIN) #define SDA_read HAL_GPIO_ReadPin(SDA_GPIO_PORT , SDA_PIN) 有了这段定义,STM32F103驱动mlx90640的关键就搞定了,你如果示波器跟踪的话,就可以看见SCL&SDA的交互脉冲了。 当然,接下来收尾: 代码跟前面的类似: 。..。..。..。..。..。..。..。 while (1) { MLX90640_GetFrameData(MLX_I2C_ADDR, frame); Ta = MLX90640_GetTa(frame, &mlx90640); tr = Ta - TA_SHIFT; MLX90640_CalculateTo(frame, &mlx90640, emissivity, tr, mlx90640To); //LSB first, MSB behind CheckCode=0x5A5A; CheckCode+=0x0602; for(i=0;i《768;i++) { UsartBuff[i*2+4]= (uint16_t)(mlx90640To[i]*100)&0xFF; UsartBuff[i*2+5]= ((uint16_t)(mlx90640To[i]*100)》》8)&0xFF; CheckCode+=(uint16_t)(mlx90640To[i]*100); } UsartBuff[1540]= (uint16_t)(Ta*100)&0xFF; UsartBuff[1541]= ((uint16_t)(Ta*100)》》8)&0xFF; CheckCode+=(uint16_t)(Ta*100); UsartBuff[1542]= (uint16_t)CheckCode&0xFF; UsartBuff[1543]= ((uint16_t)CheckCode》》8)&0xFF; CDC_Transmit_FS(UsartBuff, 1544); LEDFlash(1); } 。..。..。..。..。..。..。..。 通过USB CDC通信,也就是CDC_Transmit_FS(UsartBuff, 1544),你可以发现,像MLX90640类似的数据量传输起来太容易了,速度快串口好多,另外就是便携多了,像我第一张图那样,感觉整个小装置很清爽,下一步,我看看能否再在上面驱动个普通的摄像头和FLASH,充分利用STM32的硬件。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1627 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1550 浏览 1 评论
984 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
688 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1601 浏览 2 评论
1867浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
650浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
518浏览 3评论
536浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
506浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 19:00 , Processed in 0.885393 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号