• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

CubeMX配置STM32F103C8T6芯片调试光电传感器

人工智能 better_coder 1196次浏览 0个评论

写在前面

我最近在调试购物车的底盘,底盘上有一个光电传感器,是通过串口接收命令并且进行上传感应结果的,第一次使用,特此写一篇博客记录调试过程,并且会在最后放出调试结果CubeMX配置STM32F103C8T6芯片调试光电传感器数据流传是这样的,首先由STM32F103C8T6芯片(后简称为103)发送数据读取命令0x57给光电传感器,光电传感器接收到数据读取命令之后会通过光电传感器上的串口发送其16个灯的状态给103(亮0灭1),最后由103通过USART1将光电传感器的数据传给USB-TTL,并在PC端的串口助手查看结果。  


CubeMX配置工程

这个是配置芯片的总览图,可以看到我只用了USART1,因为103通过USART1_TX将数据读取命令发送给光电传感器光电传感器接收到数据读取命令之后会将传感器结果通过USB-TTL传到PC端,这样就可以在PC端的串口助手里查看光电传感器的数据CubeMX配置STM32F103C8T6芯片调试光电传感器   

接下来配置RCCSYS,这2个模块在大部分芯片里都是大同小异的哦CubeMX配置STM32F103C8T6芯片调试光电传感器CubeMX配置STM32F103C8T6芯片调试光电传感器  

这个是配置串口模式,下面没有截取的部分我都是用的默认的波特率9600,因为这个工程对于实时性的要求不高,因此我选择了异步通信(Asynchronous)CubeMX配置STM32F103C8T6芯片调试光电传感器  

这个是工程的一些经验配置,可以让工程文件小一些,因为我用的是keil5的开发环境所以我IDE选的是MDK-ARM V5,具体可以根据自己的IDE来选择CubeMX配置STM32F103C8T6芯片调试光电传感器CubeMX配置STM32F103C8T6芯片调试光电传感器  

最后点这个生成工程就可以了  CubeMX配置STM32F103C8T6芯片调试光电传感器  

Keil5工程配置

我配置的这个工程出现了一个问题CubeMX配置STM32F103C8T6芯片调试光电传感器  折腾了一会儿,发现是我工程配置出了问题,放一下解决办法   首先我们需要去官网上下载芯片包:

https://www.keil.com/dd2/Pack/  

下载的是如下图红框内所示的芯片包CubeMX配置STM32F103C8T6芯片调试光电传感器  

然后打开keil的pack installer进行import芯片包,import直接选择上述芯片包的文件夹即可文件夹里面有其他东西也没关系CubeMX配置STM32F103C8T6芯片调试光电传感器  

import进芯片包之后点开keil上面的导航栏里的魔术棒,进入到Device选项卡,进行芯片的选择CubeMX配置STM32F103C8T6芯片调试光电传感器  

芯片选择完毕之后进入到Debug选项卡,并且进入SettingCubeMX配置STM32F103C8T6芯片调试光电传感器  在Setting内选择Flash Download查看Programming Algorithm里面是否有这个选项,有的话点确定就可以了,如果没有的话就点add把它加进来就可以了,如果点开add之后没有这个选项的话就是之前一些步骤出问题了,回溯一下看看自己漏了哪些东西CubeMX配置STM32F103C8T6芯片调试光电传感器  


程序调试

先放程序再讲解

#define buffer_size   1024
int main(void)
{
  /* USER CODE BEGIN 1 */
	uint8_t sensor_code = 0x57; 
	uint8_t uart6Rx[16];  
  /* USER CODE END 1 */
  

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
		HAL_UART_Transmit(&huart1, (uint8_t *)&sensor_code, 1, 1000);
		HAL_Delay(100);
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

main程序里面是这样的,在while(1)里面每隔100ms发送一次数据读取命令(0x57),延时主要是因为芯片通信时硬件处理指令也是需要时间的,如果数据发送的过快的话逻辑会出问题,很有可能会发生数据丢包或者程序跑飞的情况,因此我在这里做了这个延时。这个延时操作在很多需要通信的地方都用得到,因为我们需要延时来消除这段时间对我们的整体程序逻辑的影响。  

回到我们这个话题,当光电传感器接收到数据读取命令(0x57)之后,会通过串口发送数据到USB-TTL,这样我们就可以在PC端的串口助手看到光电传感器所感知到的数据了。  

根据分析测试得出,当接收到数据请求指令后,光电传感器会发送一个字节的数据,这个字节的16个byte分别代表了16个巡迹灯的状态,如果有遮挡的话就会将该巡迹灯对应的byte置为1,具体的对应关系如下图所示:CubeMX配置STM32F103C8T6芯片调试光电传感器  如上图所示,红色的点表示光电传感器的巡迹灯,我将其从0到15进行了编号,黑色的0表示了一个字节的16个byte,左边8个巡迹灯是低8位,右边8个巡迹灯是高8位  


                                               (づ ̄3 ̄)づ╭❤~一键三连,这次一定(๑•̀ㅂ•́)و✧

CubeMX配置STM32F103C8T6芯片调试光电传感器


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明CubeMX配置STM32F103C8T6芯片调试光电传感器
喜欢 (0)

您必须 登录 才能发表评论!

加载中……