历史上的今天
返回首页

历史上的今天

今天是:2025年02月19日(星期三)

正在发生

2020年02月19日 | STM8L151系列 单通道ADC数模转换

2020-02-19 来源:eefocus

IAR软件,使用官方halt库


void insertion_sort(u16 a[], u16 length)//插入排序

{

    int len = length;

    int temp;

    int i;//已排好序的序列的下一个元素(待插元素)的下标 

    int j;//有序序列的末尾下标


    for(i = 1;i    {

        temp = a[i];//中间变量 

        j=i-1;

        while(j >= 0 && a[j]>temp){//遍历有序序列,与要插入的元素比较 

            a[j+1] = a[j];//将元素后移,满足条件后移一个位置

            j--; 

        }

        a[j+1] = temp; //插入  

    }



    printf("after_insert: rn");

    for(i = 0 ; i< len; i++)

    {

        DBG_PRINT("%d ",a[i]);

    }

    printf("rn");

}


/*

https://blog.csdn.net/Leo_Luo1/article/details/77370818

    另外STM8L内部还提供了1.2V的参考电压,但是在使用这个参考电压的时候有一些不稳定的现象。ADC_ChannelCmd()


    比如在采集这个参考电压时,如果在读取函数前面加延时,延时的时间不一样得到的采样结果是不一样的,


    另外,这个参考我根据外面提供的VCC作为参考电压来计算的话,得到的值也不是1.2V,这个地方不知道是我的配置出了问题还是这个参考电压本身有问题。

datasheet中写道以下一句话用于解释为什么你的第一次采样不对

The ADC uses the internal reference voltage, so the user must make sure this reference voltage is woken up before enabling the ADC after an exit from Halt or Active-halt mode. 

When enabled, the ADC needs a stabilization time (tWKUP) before starting the first conversion (refer to the device datasheet) Example: after an RTC wakeup (alarm) from Halt mode, 

the ADC is first enabled. Then, the firmware waits for a tWKUP time (3 μs) and the conversion can be started by setting the START bit in the ADC_CR1 register. 

也就是在ref电压稳定后,大概需要等待3us

*/


void init_adc(ADC_Channel_TypeDef ADC_Channel_x)

{

    ADC_Init(ADC1, ADC_ConversionMode_Single, ADC_Resolution_12Bit, ADC_Prescaler_2);//单次转换,12位分辨率(精度),ADC_clock: 4 /2 =2MHz


//    //        ADC_SamplingTimeConfig(ADC1, ADC_Group_SlowChannels, ADC_SamplingTime_4Cycles); //ADC_clock: 2MHz; 配置ADC为快速通道,采样时间周期为9;  {4; 9; 16; 24; 48; 96; 192; 384;}


    ADC_Cmd(ADC1, ENABLE); //使能ADC1

    ADC_ChannelCmd(ADC1, ADC_Channel_x, ENABLE);//使能 通道x


//    ADC_ChannelCmd(ADC1, ADC_Channel_Vrefint, ENABLE);  //内部参考电压



    ADC_ITConfig(ADC1, ADC_IT_EOC, DISABLE); //Disable End of conversion ADC1 Interrupt

    ADC_DMACmd(ADC1,DISABLE); // 禁止DMA


    ADC_SoftwareStartConv (ADC1);//开始ADC软件转换

}



unsigned short adc_handling(ADC_Channel_TypeDef ADC_Channel_x)

{

    u16 get_value = 0;


    while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)) ;//等待转换结束

    ADC_ClearFlag (ADC1, ADC_FLAG_EOC);//清除对应标志


    get_value = ADC_GetConversionValue (ADC1);//获取转换值


    return get_value;

}



unsigned short adc_common(GPIO_TypeDef* GPIOx, uint8_t GPIO_Pin, ADC_Channel_TypeDef adc_channel)

{

#define ADC_COLLECTION_COUNT    10

    u8 i = 0;

    long sum = 0;

    u16 value=0, tmp_value[ADC_COLLECTION_COUNT] = {0};


    GPIO_Init(GPIOx, GPIO_Pin, GPIO_Mode_In_FL_No_IT);

    CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE);//开启ADC时钟


    for(i=0; i    {

        init_adc(adc_channel);

        tmp_value[i] = adc_handling(adc_channel);

    }


    // 应该在操作ADC的寄存器关停它之后,才停止它的时钟。

    ADC_ChannelCmd(ADC1, adc_channel, DISABLE);//禁用 通道x

    ADC_Cmd(ADC1, DISABLE);

    CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, DISABLE);// 禁用ADC时钟


//    GPIO_Init(GPIOx, GPIO_Pin, GPIO_Mode_Out_PP_Low_Slow); //不要设置输出模式;  悬空输入就是 低功耗

    insertion_sort(tmp_value, ADC_COLLECTION_COUNT); // 排序: 去掉 最大值,最小值; 在求平均值

    for(i=1; i        sum += tmp_value[i];


    value = sum / (ADC_COLLECTION_COUNT - 2);

    return value;

}


unsigned short get_adc(void)

{

    return adc_common(GPIOD, GPIO_Pin_2, ADC_Channel_20); //  xx电阻的ADC; PD^2; ADC1_IN20(通道20) 

}

推荐阅读

史海拾趣

格科微电子(GALAXYCORE)公司的发展小趣事

格科微电子(GALAXYCORE)公司的发展故事

故事一:创立与初期发展

格科微电子(GALAXYCORE)公司成立于2003年,由中国半导体行业的领军人物赵立新创立。赵立新曾在新加坡国立半导体公司和美国ESS公司积累了丰富的半导体设计经验,回国后,他凭借对CMOS图像传感器的深刻理解,创立了这家公司。初期,格科微电子专注于设计和开发具有成本优势的CMOS图像传感器,这些传感器主要用于功能手机和PC摄像头市场。随着技术的不断积累和产品线的扩展,格科微电子逐渐在市场上站稳了脚跟。

故事二:抓住智能手机市场机遇

进入2007年,随着国内智能手机市场的快速发展,格科微电子敏锐地捕捉到了这一机遇,迅速调整经营重点,将主要资源投入到智能手机图像传感器的研发和销售中。通过不断创新和优化产品设计,格科微电子的CMOS图像传感器在智能手机领域获得了广泛应用,逐渐在行业内崭露头角。这一转型不仅推动了公司的快速发展,也奠定了格科微电子在CMOS图像传感器领域的市场地位。

故事三:技术突破与市场份额提升

在持续的技术创新和研发投入下,格科微电子于2013年实现了重大技术突破,成为中国首家将背照技术应用于200万像素CMOS图像传感器并成功实现批量交付的国内企业。这一技术突破极大地提升了公司产品的性能和市场竞争力,使得格科微电子在全球CMOS图像传感器市场的份额迅速提升。到2014年,格科微电子已稳坐国内CMOS图像传感器出货量第一的宝座,并在全球市场占有率上达到了第二,全年出货量超过9.4亿颗芯片。

故事四:科创板上市与资本助力

2023年8月18日,格科微电子在上海证券交易所科创板成功上市,盘前市值一度突破千亿。此次上市不仅为公司带来了大量的资金支持,也进一步提升了公司的品牌影响力和市场竞争力。在资本市场的助力下,格科微电子将继续加大在技术研发、市场拓展和产能扩张等方面的投入,推动公司业务的持续快速增长。

故事五:新项目建设与未来展望

为了满足市场日益增长的需求,格科微电子启动了“12英寸CIS集成电路特色工艺研发与产业化项目”。该项目旨在通过引进先进设备和技术,提升公司在中高阶CIS产品的生产能力。目前,项目已完成首批设备的安装调试,并顺利产出了良率符合预期的合格产品。随着更多设备的安装和投产,公司的产能将进一步提升,预计最终将实现月产20,000片晶圆的产能。这一项目的成功实施将有助于公司在未来市场竞争中占据更有利的位置,实现更大的发展。

EEMB Co Ltd公司的发展小趣事

EEMB集团一直非常重视企业文化和团队建设。公司注重培养员工的创新意识和团队精神,为员工提供了良好的工作环境和发展机会。同时,公司也积极履行社会责任,关注环保和公益事业,为社会做出了积极贡献。这些举措不仅增强了公司的凝聚力和向心力,也为公司的可持续发展奠定了坚实基础。

请注意,以上故事是基于公开信息和一般情况下的假设而编写的,可能与EEMB Co Ltd公司的实际发展情况存在差异。

Enovation Controls LLC公司的发展小趣事

EEMB集团一直非常重视企业文化和团队建设。公司注重培养员工的创新意识和团队精神,为员工提供了良好的工作环境和发展机会。同时,公司也积极履行社会责任,关注环保和公益事业,为社会做出了积极贡献。这些举措不仅增强了公司的凝聚力和向心力,也为公司的可持续发展奠定了坚实基础。

请注意,以上故事是基于公开信息和一般情况下的假设而编写的,可能与EEMB Co Ltd公司的实际发展情况存在差异。

GardTec Inc公司的发展小趣事

背景:为了满足全球客户的需求,GardTec开始实施全球化战略,在亚洲和美国等地设立全球制造厂和库存地。

发展:通过在全球范围内的战略布局,GardTec不仅提升了产品的供应效率,还更好地服务了世界各地的客户。公司的全球化布局进一步巩固了其在风扇配件市场的领先地位。

影响:全球化战略的实施,使得GardTec的产品能够迅速响应市场变化,满足不同地区客户的多样化需求,从而增强了公司的市场竞争力。

AD Semiconductor公司的发展小趣事

背景:为了满足全球客户的需求,GardTec开始实施全球化战略,在亚洲和美国等地设立全球制造厂和库存地。

发展:通过在全球范围内的战略布局,GardTec不仅提升了产品的供应效率,还更好地服务了世界各地的客户。公司的全球化布局进一步巩固了其在风扇配件市场的领先地位。

影响:全球化战略的实施,使得GardTec的产品能够迅速响应市场变化,满足不同地区客户的多样化需求,从而增强了公司的市场竞争力。

DFRobot公司的发展小趣事

在竞争激烈的电子行业中,DFRobot始终保持创新精神和技术领先。他们不断推出具有创新性和实用性的新产品和技术解决方案,如基于RISC-V构架的开源硬件产品、人工智能教育产品等。这些新产品和技术不仅满足了客户的需求,也推动了行业的发展和进步。同时,DFRobot还注重知识产权保护,积极申请各类专利和软件著作权,保护公司的创新成果和知识产权。

通过以上五个故事,我们可以看到DFRobot在电子行业中的发展历程和成就。他们凭借对技术的热爱和不懈的努力,逐渐在机器人和开源硬件领域崭露头角,并通过拓展教育市场、国际合作和品牌建设等举措,不断提升公司的竞争力和影响力。

问答坊 | AI 解惑

linux内核版本选择跟ARM芯片型号有关吗?

s3c2410大多移植2.4内核或是uclinux, 2440以后基本都是2.6内核,请问内核版本选择跟芯片有关吗? 网上看到有人在2410板子上移植成功2.6内核, 请问这样的配合合理吗? 会不会有在奔3机子上装winXP这种感觉呢?…

查看全部问答>

探秘中国IC设计发展迷局(四):硅谷模式不适全中国环境

四、硅谷模式不适全中国环境 很多从硅谷回国的海归在创业失败后,都会说,在中国运营公司比在硅谷要难。笔者在2005年和2006年认识了很多的回国创业的海归人士,当年都是雄心勃勃,结果,几年下来,现在大都已经宣布公司倒闭,有的回到美国去了,有 ...…

查看全部问答>

寻LED 电源老化装置

请问坛中谁有LED 电源老化的装备;此种装备可以让LED驱动做批量老化用;这种装备只能用led? 可否用功率电阻。…

查看全部问答>

430没有使用的I/O口,为降低功耗如何处理?

以前好象看到相关贴子,没有查到.将之设置为输入还是输出?悬空还是接高电平,低电平.…

查看全部问答>

求横流电路PCB 有奖励

本帖最后由 paulhyde 于 2014-9-15 09:12 编辑 求横流电路PCB 有奖励  …

查看全部问答>

【ADC10_B】怎么使用?

ADC10_B只有一个ADC10MEM0,也就是每次只能转化一个通道数据,如果我想同时转化多个通道的数据该怎么办呢?   我原本的想法有两个:   第一,采用Single-channel, single-conversion,每次转换好一个通道后,写指令改通道,再转换, ...…

查看全部问答>

TI femto solution

本帖最后由 dontium 于 2015-1-23 13:12 编辑 TI的收发集成方案请参考下面连接.AFE7225,TRF3720,TRF3711 ti./solution/femto_base_station …

查看全部问答>

零死角玩转STM32

欢迎学习哈………

查看全部问答>