引脚配置
R38 对应PB12 使能ADC1_IN11
R37 对应PB15 使能ADC2_IN15
Analog勾选对应11和15的single_ended
函数自定义编写
u16 adc1_val;
u16 adc2_val; //必须是u16形式
float volt_r38;
float volt_r37;
void adc_process()
{
HAL_ADC_Start(&hadc1);
HAL_ADC_Start(&hadc2);//开始转换
adc1_val = HAL_ADC_Getvalue(&hadc1);
adc2_val = HAL_ADC_Getvalue(&hadc2);//获取数值
volt_r38=adc1_val/4096.0f*3.3f;
volt_r37=adc2_val/4096.0f*3.3f;//获取电压
}
while(1)中直接调用函数即可
典型例题
记录与播放
下面的代码按下按键2后记录10秒内r37的电压变化LCD屏幕第一行显示remembering。
按下按键3,让pa4引脚输出刚才记录的电压变化信息,可以把PA4接到R38的捕获引脚观察(J12)
这两个放到while(1)中
//记录
u16 ku[100];
u8 num;
u32 remTick;
u32 beginTick;
void remember()
{
if(uwTick - beginTick > 10000)
{
LCD_DisplayStringLine(Line0,(unsigned char*)" ");
}
else
{
LCD_DisplayStringLine(Line0,(unsigned char*)"remembering");
if(uwTick - remTick>100)
{remTick = uwTick;
ku[num++]=adc2_val;}
}
}
//DAC播放remember
u32 rem2Tick;
u8 num2;
u32 rtTick;
void dac_process2()
{
if(uwTick -rtTick > 10000) return ;
if(uwTick - rem2Tick>100 )
{
rem2Tick = uwTick;
HAL_DAC_SetValue(&hdac1,DAC_CHANNEL_1,DAC_ALIGN_12B_R,ku[num2++]);
HAL_DAC_Start(&hdac1,DAC_CHANNEL_1);
}
}
按键部分
//记录
if(trg & 0x02)
{
num=0;
beginTick=uwTick;
}
//播放
if(trg & 0x04)
{
num2 = 0;
rtTick = uwTick;
}
按下按键后进行10s计时,10s内进行操作
这里其实有个问题,当我们RESET后,因为uwTick=0,所以会自动运行记录和播放的程序,解决方案就是可以在主函数中while()外面设置uwTick=20000(这个时间根据情况具体分析),这样就可以避免上电或者RESET就执行函数。