【沁恒微CH32V307评估板试用体验】串口读取传感器数据,显示在液晶屏上 - RISC-V MCU技术社区 - 电子技术william hill官网 - 广受欢迎的专业电子william hill官网 - 威廉希尔官方网站
分享 收藏 返回

[文章]

【沁恒微CH32V307评估板试用体验】串口读取传感器数据,显示在液晶屏上

传感器接线.png

基本接线: PA9==>传感器PIN4
                  PA10==>PIN5
                  PE6 ==>PIN3
              其它就是V50接传感器VCC GND接GND
迪文串口屏只需要用到V50,GND,TX,RX,所以使用了PA2,PA3两个GPIO口
  1. int main(void)
  2. {

  3.     SystemSetup();              // 本函数已包含SystemInit(),所以屏蔽上一行 ,使能外设时钟
  4.   //  delay_init(72);      //延时初始化

  5.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  6.     LED_Init();        //LED端口初始化
  7.     EnablePMSensor();
  8.    // DisablePMSensor();
  9.   // delay_ms(2000);



  10.     PmSensor_com_init(9600);     //传感器串口初始化  串口1       TX=PA9  RX=PA10
  11.     Screen_com_init(115200);     //串口屏初始化 串口2           TX=PA2 RX=PA3

  12.    // timer3_Init(9,7199);        //10Khz的计数频率,计数到10为1ms
  13.     switchPage(1);

  14.     while (1)
  15.     {
  16.     display_page_n(1,pm_golob);
  17.   //  display_page_n(2,pm_golob);



  18.     }
主函数非常熟悉吧,和ARM那套基本上一样的。 这中间有一个细节,SYSTICK的寄存器命名和ARM那套不怎么一样,需要查规格书,在9.5.5。源码里面关于结构体里面的成员是一丁点注释都没有,这个希望原厂有机会加上。


  1. void EnablePMSensor(void)
  2. {
  3.     GPIO_SetBits(SENSOR_SET_PORT, SENSOR_SET_PIN);
  4. }

  5. void DisablePMSensor(void)
  6. {
  7.     GPIO_ResetBits(SENSOR_SET_PORT, SENSOR_SET_PIN);
  8. }
记得使能传感器的SET脚,拉高就是唤醒,拉低会休眠。 可以用耳朵听听传感器的风扇是否转动。


传感器用的是主动模式,所以我们只需要使能接收中断即可
  1. //Usart1 NVIC 配置
  2.     NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  3.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;
  4.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;                //
  5.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQ通道使能
  6.         NVIC_Init(&NVIC_InitStructure);        //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器USART1
  7.   
  8.    //USART 初始化设置
  9.         USART_InitStructure.USART_BaudRate = bound;
  10.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  11.         USART_InitStructure.USART_StopBits = USART_StopBits_1;
  12.         USART_InitStructure.USART_Parity = USART_Parity_No;
  13.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  14.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

  15.     USART_Init(USART1, &USART_InitStructure);
  16.     USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启中断
  17.     USART_Cmd(USART1, ENABLE);                    //使能串口


接上传感器后,就等着中断产生,在中断处理函数里面处理好数据。
传感器是42,4D开始的,做了一个小小的标志位,也没有检查CHECKSUM, 正式写产品这些都要加上的。
  1. void USART1_IRQHandler(void)                        //串口1 传感器的中断服务程序
  2. {
  3.     unsigned char data ;
  4.             static uint8_t pm_data_start = 0;

  5.           if(USART_GetITStatus(USART1, USART_IT_RXNE))
  6.             {
  7.                 data =USART_ReceiveData(USART1);   //读取接收到的数据
  8.                   if(data==0x42)
  9.                     {
  10.                         sensor_i=0;
  11.                         pm_data_start=1;

  12.                     }

  13.                     if(pm_data_start==1)
  14.                     {
  15.                         sensor_buffer[sensor_i++]=data;
  16.                         OPEN_LED1;
  17.                     }

  18.                     //getPmsensorData(&pm_golob);
  19.                     if(sensor_i>31)
  20.                     {
  21.     //                      if(check_sum())
  22.     //                      {
  23.                                 getPmsensorData(&pm_golob);
  24.                 //          }
  25.                             sensor_i=0;
  26.                             pm_data_start=0;
  27.                     }
  28.                     CLOSE_LED1;
  29.         }
  30. }
至此,就可以在屏上显示传感器的值了。

回帖(1)

dianzi

2022-5-27 18:21:50
试用报告请在标题带上【沁恒微CH32V307评估板试用体验】

更多回帖

×
发帖