• 大小: 350KB
    文件类型: .7z
    金币: 1
    下载: 0 次
    发布日期: 2021-05-27
  • 语言: 其他
  • 标签: STM32  

资源简介

基于STM32的心率传感器设计代码 mdk代码完整可用 注释充分 包含界面

资源截图

代码片段和文件信息

#include “adc.h“
#include “delay.h“  

//初始化ADC
//我们默认仅开启ADC1_CH5    
void  Adc_Init(void)
{    
//先初始化IO口
  RCC->APB2ENR|=1<<8;     //使能ADC1时钟 
RCC->AHB1ENR|=1<<0;     //使能PORTA时钟   
GPIO_Set(GPIOAPIN5GPIO_MODE_AIN00GPIO_PUPD_PU); //PA5模拟输入下拉   

RCC->APB2RSTR|=1<<8;    //ADCs复位
RCC->APB2RSTR&=~(1<<8); //复位结束  
ADC->CCR=3<<16;      //ADCCLK=PCLK2/4=84/4=21MhzADC时钟最好不要超过36Mhz
 
ADC1->CR1=0;        //CR1设置清零
ADC1->CR2=0;      //CR2设置清零
ADC1->CR1|=0<<24;     //12位模式
ADC1->CR1|=0<<8;     //非扫描模式

ADC1->CR2&=~(1<<1);     //单次转换模式
  ADC1->CR2&=~(1<<11);    //右对齐
ADC1->CR2|=0<<28;      //软件触发

ADC1->SQR1&=~(0XF<<20);
ADC1->SQR1|=0<<20;      //1个转换在规则序列中 也就是只转换规则序列1     
//设置通道5的采样时间
ADC1->SMPR2&=~(7<<(3*5));//通道5采样时间清空   
  ADC1->SMPR2|=7<<(3*5);   //通道5  480个周期提高采样时间可以提高精确度  
  ADC1->CR2|=1<<0;        //开启AD转换器   
}   
//获得ADC值
//ch:通道值 0~16
//返回值:转换结果
u16 Get_Adc(u8 ch)   
{
//设置转换序列     
ADC1->SQR3&=0XFFFFFFE0;//规则序列1 通道ch
ADC1->SQR3|=ch;        
ADC1->CR2|=1<<30;       //启动规则转换通道 
while(!(ADC1->SR&1<<1));//等待转换结束      
return ADC1->DR; //返回adc值
}
//获取通道ch的转换值,取10次冒泡排序,掐头去尾,取平均
u16 Get_Adc_Average(u8 ch)
{
u8 ij;
u16 buff[10]={0};
u16 temp;
for(i=0;i<10;i++)
{
buff[i]=Get_Adc(ch);    //读取转换结果
}

/* 把读取值的数据按从小到大的排列 */
for(i=0;i<9;i++)
{
for(j=0;j<9-i;j++)
{
if(buff[j]>buff[j+1])
{
temp = buff[j];
buff[j] = buff[j+1];
buff[j+1] = temp;
}
}
}

/* 求平均值 */
temp=0;
for(i=1;i<9;i++)
{
temp+=buff[i];
}

return temp/8;
}











评论

共有 条评论