stm32f401 边沿捕获_[STM32F401-DISCO开发板]实验三、2路ADC采样+2路PWM输出实验

本文介绍了一个使用STM32F401 DISCO开发板进行的实验,实验中配置了2路ADC采样和2路PWM输出,并将数据在LCD上显示,同时通过串口输出。通过边沿捕获技术,实现了PWM周期的控制,并在主函数中调整PWM占空比,更新LCD显示和串口数据。
摘要由CSDN通过智能技术生成

[STM32F401-DISCO开发板]实验一、STM32F401 DISCO开发板介绍,点亮LED

[STM32F401-DISCO开发板]实验二、驱显黑白LCD_6903,串口调试

本实验较为简单,设置2论ADC采样和2路PWM输出,并且显示在LCD上同时从串口输出数据。

定义对象:

AnalogIn adc0(PA_4);

AnalogIn adc1(PA_5);

PwmOut pwm0(PA_10);

PwmOut pwm1(PA_8);

Ticker tick;//Time Interupt Clock

//DigitalOut led(LED1);

Serial sout(PA_2,PA_3);//(USBTX, USBRX);

定义显示函数:

void dispBase(void);

void dispMes(void);

定义变量:

//DEFINE VARIABLE

int32_t jsq;

float val0,val1,dut0=0.330f,dut1=0.450f,ddu0=0.003f,ddu1=0.002f;

int pdir0=1,pdir1=1,twAddr1=0xBC,twAddr2=0xBB;

char twData[2]={0,0};

定义中断Tick实现程序计数器:

void tipInt(void){jsq++;}

定义GPIO[仅仅PWM周期]:

void ioInit(void){

pwm0.period(0.003f);//pwm0

pwm1.period(0.004f);//pwm1

}

main函数:

int main(){

ioInit();

lcdInit();

lcdClear();

dispBase();

tick.attach(&tipInt,0.005f);

sout.printf("TEST 2ADC 2PWM a LCD Display\n\r");

while(true){

val0=adc0.read();

val1=adc1.read();

if(dut0>0.810f){pdir0=0;};if(dut0<0.180f){pdir0=1;}

if(pdir0==0){dut0 -=ddu0;};if(pdir0==1){dut0 +=ddu0;}

pwm0=dut0;

if(dut1>0.610f){pdir1=0;};if(dut1<0.160f){pdir1=1;}

if(pdir1==0){dut1 -=ddu1;};if(pdir1==1){dut1 +=ddu1;}

pwm1=dut1;

//i2c.read(twAddr1,twData,2);

if((jsq/5)%5==1){dispMes();}

sout.printf("ADC1=%0.4f ADC2=%0.4f PWM1=%0.3f PWM2=%0.3f ",val0,val1,dut0,dut1);

sout.printf("DATA0:%d DATA1:%d \n\r",twData[0],twData[1]);

//led=!led;

//wait(0.05);

}

}

显示固定字符函数:

//Display Base Meseger

void dispBase(void){

c2l(0,0,19);c2l(1,0,28);c2l(2,0,26);c2l(3,0,40);//JSQ:

c2l(0,1,10);c2l(1,1,13);c2l(2,1,0);c2l(3,1,40);//AD0:

c2l(9,1,10);c2l(10,1,13);c2l(11,1,1);c2l(12,1,40);//AD1:

c2l(0,2,25);c2l(1,2,32);c2l(2,2,0);c2l(3,2,40);//PW0:

c2l(9,2,25);c2l(10,2,32);c2l(11,2,1);c2l(12,2,40);//PW1:

c2l(0,3,29);c2l(1,3,14);c2l(2,3,22);c2l(3,3,40);//TEM:

c2l(9,3,17);c2l(10,3,30);c2l(11,3,22);c2l(12,3,40);//HUM:

}

显示采样和PWM输出计数器输出数据:

//Display Messeg

void dispMes(void){

c2l(4,0,(jsq/1000000)%10);c2l(5,0,(jsq/100000)%10);c2l(6,0,(jsq/10000)%10);c2l(7,0,(jsq/1000)%10);//JSQ:

c2l(8,0,(jsq/100)%10);c2l(9,0,(jsq/10)%10);c2l(10,0,(jsq)%10);//JSQ:

c2l(4,1,int(val0*10)%10);c2l(5,1,int(val0*100)%10);c2l(6,1,int(val0*1000)%10);c2l(7,1,int(val0*10000)%10);//ad0

c2l(13,1,int(val1*10)%10);c2l(14,1,int(val1*100)%10);c2l(15,1,int(val1*1000)%10);c2l(16,1,int(val1*10000)%10);//ad0

c2l(4,2,int(dut0*10)%10);c2l(5,2,int(dut0*100)%10);c2l(6,2,int(dut0*1000)%10);

c2l(13,2,int(dut1*10)%10);c2l(14,2,int(dut1*100)%10);c2l(15,2,int(dut1*1000)%10);

c2l(4,3,(twData[0]/100)%10);c2l(5,3,(twData[0]/10)%10);c2l(6,3,(twData[0])%10);

c2l(13,3,(twData[1]/100)%10);c2l(14,3,(twData[1]/10)%10);c2l(15,3,(twData[1])%10);

}

编译后下载运行结果见照片和截图。照片31为硬件连接;照片32为LCD显示结果;照片33为PWM控制2个LED轮流渐亮暗;截图34为牟尼出口输出的ADC和PWM数据。

2017-12-10 10:53 上传

77d7efbe7767a7bbf02cddc2f7628191.gif

7cb2c5af6b3e0da180d1034f39da79d0.gif

31

851f1456299fc7e6d0742f2ae7c162b4.gif

32-LCD显示结果.jpg

(126.6 KB, 下载次数: 15)

2017-12-10 10:53 上传

77d7efbe7767a7bbf02cddc2f7628191.gif

7cb2c5af6b3e0da180d1034f39da79d0.gif

32

851f1456299fc7e6d0742f2ae7c162b4.gif

2017-12-10 10:53 上传

77d7efbe7767a7bbf02cddc2f7628191.gif

7cb2c5af6b3e0da180d1034f39da79d0.gif

33

851f1456299fc7e6d0742f2ae7c162b4.gif

2017-12-10 10:53 上传

77d7efbe7767a7bbf02cddc2f7628191.gif

7cb2c5af6b3e0da180d1034f39da79d0.gif

34

851f1456299fc7e6d0742f2ae7c162b4.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值