OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7463|回复: 1

STM8SF103F3 多通道AD连续扫描

[复制链接]

22

主题

180

帖子

1

精华

高级会员

Rank: 4

积分
616
金钱
616
注册时间
2015-6-29
在线时间
101 小时
发表于 2015-8-31 19:37:44 | 显示全部楼层 |阅读模式
      最近在学习STM8S,使用的是STM8SF103F3 ,网上一块最小板5元~~在学习ADC模块时,想实现像STM32那样的多通道连续扫描的效果,网上搜了一下,都没发现合自己心水的代码,想着反正有中文版的参考手册,自己写吧,估计跟STM32差不多。没想到一写,才发现跟STM32的有点不一样,差点把自己搞晕了,主要注意以下几点:

1、我使用的这个芯片没有DMA,还好多了一个数据缓存寄存器,配合中断也是基本上能达到STM32使用DMA的效果;

2、STM8S的AD的扫描模式比较坑爹,只能规定从AIN0通道开始转换,一直转换到AINn通道,跟STM32可以指定扫描序列相比简直不能忍;

3、按照正常思路,在AD的转换完成中断函数中要清除相应的标志位,一开始直接调用库函数ADC1_ClearITPendingBit(ADC1_IT_EOC),发现又跪了,仔细看参考手册,发现有这么一段话:
    “在扫描模式中,不要使用位操作指令去清除EOC标志位,这是因为该指令是对整个ADC_CSR寄存器的一个读-修改-写操作。而在扫描转换的过程中,序号CH[3:0]位的值是被硬件自动更新的,它总是保存当前正在被转换的通道编号,从CH[3:0]寄存器中读取当前的通道编号和写回该寄存器,将会改变扫描序列的最后通道编号。
     在连续扫描模式中正确的清除EOC标志位的方法是从一个RAM变量中载入一个字节到ADC_CSR寄存器,这样来
清除EOC标志位同时还重新载入扫描序列新的最后通道编号。”
      这个不仔细看还真的掉坑里面去了。

      不知道我的理解对不对,还请大家多多指教,最后附上代码:



ADC.c

2.4 KB, 下载次数: 1004

ADC.h

2.58 KB, 下载次数: 595

我是菜鸟
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-8-31 20:59:36 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 16:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表