完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
STM8S003F3这款小型MCU,只有1K RAM与8K Flash,应用比较简单,AD采样,GPIO控制,PWM控制,还是不错的嵌入式的应用。
最近一个项目用到了几路AD采样,我平时一般喜欢下载最新的官方标准固件库,只是,这次遇到的问题是,在使用PWM与ADC采样后,代码大小竟然大于8K,编译失败!!!后来,看了下Debug下的map文件,发现,使用ADC的固件库,大小竟然有1K的代码空间。后来改为寄存器的,发现代码还不到100字节。 (1)固件库AD采样的代码如下,代码易懂,但编译后代码较大:单通道采样,多个的话,只需要一个一个采集。 #include "adc.h" #include "stm8s.h" void InitAD(uint8_t channel) { /* De-Init ADC peripheral*/ ADC1_DeInit(); //通道初始化 ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, (ADC1_Channel_TypeDef)channel, ADC1_PRESSEL_FCPU_D18, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, (ADC1_SchmittTrigg_TypeDef)channel, DISABLE); } void AD_Start(void) { ADC1_ScanModeCmd(ENABLE);//启用扫描模式 ADC1_DataBufferCmd(ENABLE);//启用缓存寄存器存储数据 //ADC1_ITConfig(ADC1_IT_EOCIE,DISABLE);//关闭中断功能 ADC1_Cmd(ENABLE);//启用ADC1 ADC1_StartConversion();//开始转换*/ } uint16_t getADCValue(uint8_t channel) { InitAD(channel); AD_Start(); while(ADC1_GetFlagStatus(ADC1_FLAG_EOC) == RESET); return ADC1_GetConversionValue(); } 调用的方法如下: VccAdc = getADCValue(6); (2)寄存器AD采样的代码如下:短小,能用,只是不看手册,很难理解。 #include "adc.h" #include "stm8s.h" void InitAD(void) { ADC1->CR1 = 0x01; //设置ADC不分频、单次转换 ADC1->CR2 = 0x08; //设置不外部触发也不开启中断、数据右对齐、不开启扫描 ADC1->CSR = 0x06; //清除转换标志 设置通道5为AD口 } void setADCChannel(uint8_t channel) { ADC1->CSR = (channel & 0x0F); //写入转换通道 } uint16_t getADCValue(void) { uint16_t adc = 0x00; ADC1->CR1 |= 0x01; //启动ADC开始转换 while((adc & 0x80) == 0x00){adc = ADC1->CSR;} //等待转换完成 adc = ADC1->DRL; adc |= (ADC1->DRH << 0x08); //获取ADC值 return adc; } 调用的方法: setADCChannel(VCC_AIN_CHANNEL); VccAdc = getADCValue(); 测试下来,采样还算是比较准确的,并且速度也挺快的。 算是STM8S003的使用经验积累吧。 |
|
|
|
只有小组成员才能发言,加入小组>>
3277 浏览 9 评论
2950 浏览 16 评论
3454 浏览 1 评论
8983 浏览 16 评论
4044 浏览 18 评论
1094浏览 3评论
567浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
564浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2298浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1855浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-20 01:35 , Processed in 1.188627 second(s), Total 80, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号