今天效率比较高,边学变写文章还能学这么多,可能是之前单片机学过,原理不用学很多
目录
一. 原理图
Tr_AO:光敏电阻电压值
Tr_DO:比较光敏电阻电压和可调变阻器的电压之后的输出值,只有0和3.3V
二. STM32CubeMX 配置
由于上次配置双路ADC已经配置了PA4,和这次完全一样。故这次只要配置PA3
三. 代码编写
随便找个定义引脚的文件把代码引脚PA3的配置加上就行
1. leds.c 文件
void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOA_CLK_ENABLE();
/*Configure GPIO pin : PA3 */
GPIO_InitStruct.Pin = GPIO_PIN_3;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
2. main.c 文件
直接用HAL_GPIO_ReadPin()函数读引脚电平就ok
#include "main.h"
#include "stdio.h"
#include "lcd.h"
#include "leds.h"
#include "tim.h"
#include "adc.h"
//模块计时
__IO uint32_t Lcd_uwTick=0;
/*函数声明------------------------------------------------------------------------------*/
void lcd(void);
/*主函数------------------------------------------------------------------------------*/
int main(void)
{
HAL_Init();
SystemClock_Config();//系统时钟设置
KEY_Init();//按键初始化
TIM2_Init();//定时器2初始化 100ms
HAL_TIM_Base_Start_IT(&htim2);//启动定时器2中断工作模式
MX_ADC2_Init();//ADC2初始化 R37 PB15
LCD_Init();//LCD初始化
LCD_Clear(Black);//清屏
LCD_SetBackColor(Black);//背景颜色
LCD_SetTextColor(White);//文本颜色
LEDS_Init();
while (1)
{
// HAL_Delay(500);
}
}
/*常用函数------------------------------------------------------------------------------*/
void lcd()//LCD显示模块
{
if (uwTick - Lcd_uwTick < 200) return;
Lcd_uwTick = uwTick;
//扩展板ADC电压值显示
sprintf(a," AD:%5.3f V DO:%2d ",get_adc2()*3.3/4096,HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_3));
get_adc2(); //读IN13
LCD_DisplayStringLine(Line0,(unsigned char *)a);
}
//定时器中断处理
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM2)
{
lcd();//屏幕显示
}
}
四. 注意事项
(1)记得接上P4和P5的跳线帽
(2)PA3-TRDO-RP7(与R47的比较值)
(3)PA4-TRAO-R47
结语
今晚学了三个模块我是没想到的