1 ZP01模块介绍
![](https://i-blog.csdnimg.cn/blog_migrate/f545b7d59a8a1371c7089a955b926605.png)
1.1 技术指标
![](https://i-blog.csdnimg.cn/blog_migrate/bf65c9c09b4bf07641e0b04c498eb537.png)
1.2 气体灵敏度曲线
![](https://i-blog.csdnimg.cn/blog_migrate/17394c46de39fb619dd83df98bfac0cf.png)
1.3 端口定义
名称 | 功能 |
GND | 电源地 |
5V | 5V供电 |
A | 输出信号A |
B | 输出信号B |
1.4 信号输出
信号A输出 | 信号B输出 | 污染等级 | 空气状态指标 |
0(0V) | 0(0V) | 0 | 空气质量:优(洁净空气) |
0(0V) | 1(5V) | 1 | 空气质量:良(轻度污染) |
1(5V) | 0(0V) | 2 | 空气质量:中(中度污染) |
1(5V) | 1(5V) | 3 | 空气质量:差(重度污染) |
2 CubeMx配置
2.1 RCC
使能外部高速时钟
![](https://i-blog.csdnimg.cn/blog_migrate/ae61b9ae7c993448d0c44055742b95aa.png)
系统时钟设置为72MHz
![](https://i-blog.csdnimg.cn/blog_migrate/08f4d9fdbe5e7a4732e4e16f96e0de38.png)
2.2 GPIO_Input
将PC5、PC6引脚配置成GPIO_Input(GPIO输入模式),分别作为模组的信号输出
![](https://i-blog.csdnimg.cn/blog_migrate/42fc61813b36d742c4a2079628bcaa58.png)
2.3 USART
配置串口,将输出信息打印到串口助手
![](https://i-blog.csdnimg.cn/blog_migrate/6abda45581546823b4901ad2e4dc6f5b.png)
2.3 SYS--Debug
选择Serial Wire,才能通过DAP-Link烧录程序
![](https://i-blog.csdnimg.cn/blog_migrate/8579b2d5e07c0a9149499c834296f35a.png)
3 keil5
3.1 printf重定向
重定向printf才能将数据打印到串口助手
#include "stdio.h"
//重定向printf
int fputc(int ch,FILE *f)
{
uint8_t temp[1]={ch};
HAL_UART_Transmit(&huart1,temp,1,2);
return ch;
}
【注意】勾选微库(USE MicroLIB),否则数据无法打印
![](https://i-blog.csdnimg.cn/blog_migrate/7f5221b7569cddad1ca98f672359a4fb.png)
3.2 ZP01_User
void ZP01_User(void)
{
uint16_t A_num; //信号A的输出值
uint16_t B_num; //信号B的输出值
A_num = HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_6);
B_num = HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_5);
if(A_num == 0 && B_num == 0)
printf("空气质量:优(洁净空气)\n");
if(A_num == 0 && B_num == 1)
printf("空气质量:良(轻度污染)\n");
if(A_num == 1 && B_num == 0)
printf("空气质量:中(中度污染)\n");
if(A_num == 1 && B_num == 1)
printf("空气质量:差(重度污染)\n");
}
3.3 main.c
int main(void)
{
/* USER CODE BEGIN 1 */
/* 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)
{
ZP01_User(); //调用函数
HAL_Delay(500); //500ms打印一次
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
4 串口打印结果
![](https://i-blog.csdnimg.cn/blog_migrate/8e94ac3a97d4b93a02f92db464ef679b.png)