keil开发L0系列是免费的,官方提供许可的。因此建议Keil开发,
L011F3由于flash只有8K,因此不建议HAL库,建议使用cubemx+LL(或snippets库)。
0、起初,可以参考官方库中自带的例程,有LL例程,MIX(LL+HAL混合)例程,HAL例程,snippets(基于L053)例程。
建立自己的工程,如果不太熟悉L0系列,可以使用cubemx来进行配置,生成最基本的工程模板,然后可以再结合例程,移植到工程当中,
1、使用cubemx新建LL库的基本例程,可以把GPIO+UART的配置可以完成。
2、LL库中有ADC_MultiChannelSingleConversion的例程,目录在\STM32Cube_FW_L0_V1.11.0\Projects\NUCLEO-L073RZ\Examples_LL\ADC\ADC_MultiChannelSingleConversion\,这个开发板的例程最多了。
例程中使用ADC+DMA采样一路外部引脚+vref+tsen,自己可以修改为采集两路外部引脚。
3、例程中有adc+dma的中断处理,我们可以暂时不用,先完成两路采集,因此方案有:单次转换模式,连续转换模式 可以完成。
4、具体的配置可以参考LL例程,首先以单次转换模式为例,使用systick作为系统的定时器,每隔10ms开启一次ADC软件转换,同时在adc配置中使用LL_ADC_REG_SetContinuousMode(ADC1, LL_ADC_REG_CONV_SINGLE);
注意,不需要关闭ADC转换开关,mcu在一次转换完成后,硬件自动关闭转换的。具体可以参考《基于超低功耗 STM32L0x3 高级 ARM ® 的32 位 MCU》参考手册的ADC部分——14.5.5 时序图示例(单次/ 连续模式硬件/ 软件触发)内容,有详细的时序图,参考手册有中文版。


这样,每次转换完,DMA搬运两路AN的数据,串口显示数据。不用担心数据搬运不及时,DMA的搬运数据是很快的,ADC采样速率也是很快的,10ms打开一次软件转换,不会导致数据溢出。只不过存放ADC值的数组,内容会经常被DMA覆盖为最新值。
5、以连续转换模式为例,初始化中,就开启软件转换,且使用LL_ADC_REG_SetContinuousMode(ADC1, LL_ADC_REG_CONV_CONTINUOUS);连续转换模式。这样ADC等系统运行后,一直采样,DMA一直搬运数据。
6、总结,stm32L0针对两种方法都可以轻松应对,相比较而已,每10ms打开一次软件转换,相对来说比较低功耗。实际应用中,都可以应用两种ADC多通道采样方案。
7、cubemx导出的工程实例中,preprocessor symbols会自动添加如下宏定义:
keil版本
USE_FULL_LL_DRIVER,HSE_VALUE=8000000,HSE_STARTUP_TIMEOUT=100,LSE_STARTUP_TIMEOUT=5000,LSE_VALUE=32768,MSI_VALUE=2097000,HSI_VALUE=16000000,LSI_VALUE=37000,VDD_VALUE=3300,PREFETCH_ENABLE=0,INSTRUCTION_CACHE_ENABLE=1,DATA_CACHE_ENABLE=1,STM32L011xx
iar版本:
USE_FULL_LL_DRIVER
HSE_VALUE=8000000
HSE_STARTUP_TIMEOUT=100
LSE_STARTUP_TIMEOUT=5000
LSE_VALUE=32768
MSI_VALUE=2097000
HSI_VALUE=16000000
LSI_VALUE=37000
VDD_VALUE=3300
PREFETCH_ENABLE=0
INSTRUCTION_CACHE_ENABLE=1
格式稍许不同
!!别忘记了头文件的路径
8、keil工程中,会自动加载flash算法,iar也会加载icf文件,工程不大,可以自己根据导出的模板,重新建立一个工程。
9、KEIl中最好选中C99模式。IAR中自动选择C11模式。
10、生成HEX文件,两个IDE均需手动选择生成,否则仅仅编译而已。其他配置基本是默认即可。
11、在LL库中,stm32l0xx_ll_utils.h和core_cm0plus.h文件中都定义了__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
两者IDE通过层层调用,首先调用stm32l0xx_ll_utils.h文件中的SysTick_Config函数,而这个函数中,是没有开启SysTick_CTRL_TICKINT_Msk的。因此和core_cm0plus.h是有所区别的。
!!而HAL库会直接调用core_cm0plus中的SysTick_Config,因为外部没有实现,会默认使用系统内核core_cm0plus.h的SysTick_Config函数
#if (__Vendor_SysTickConfig == 0U)

/**
\brief System Tick Configuration
\details Initializes the System Timer and its interrupt, and starts the System Tick Timer.
Counter is in free running mode to generate periodic interrupts.
\param [in] ticks Number of ticks between two interrupts.
\return 0 Function succeeded.
\return 1 Function failed.
\note When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the
function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>
must contain a vendor-specific implementation of this function.
*/
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
{
if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)
{
return (1UL); /* Reload value impossible */
}

SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */
NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */
SysTick->VAL = 0UL; /* Load the SysTick Counter Value */
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
SysTick_CTRL_TICKINT_Msk |
SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */
return (0UL); /* Function successful */
}
12、因此在我的工程中,使用LL库,把stm32l0xx_ll_utils.h属性去掉只读,修改函数和core_cm0plus.h一样,开启中断使能,如此一来可以用systick定时器,做一个基本的延时函数。同时可以用systick实现时间片的框架。
void Delay_ms(__IO uint32_t nTime)
{
TimingDelay = nTime;
while (TimingDelay != 0);
}

void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}

注意事项。stmL0的ADC一定要进行自校准,否则采样出来的值是不准确的。

STM32L0开发——ADC多通道采集,IDE和IAR开发注意事项的更多相关文章

  1. STM32—ADC多通道采集电压

    文章目录 ADC详解 程序说明 函数主体 引脚配置 ADC和DMA配置 主函数 ADC详解 前面的博客中详细介绍了STM32中ADC的相关信息,这篇博客是对ADC内容的一个总结提升,ADC的详细介绍: ...

  2. STM32 ADC多通道转换DMA模式与非DMA模式两种方法(HAL库)

    一.非DMA模式(转) 说明:这个是自己刚做的时候百度出来的,不是我自己做出来的,因为感觉有用就保存下来做学习用,原文链接:https://blog.csdn.net/qq_24815615/arti ...

  3. 第30章 ADC—电压采集—零死角玩转STM32-F429系列

    第30章     ADC—电压采集 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fireg ...

  4. EFM32在使用IAR开发环境配置ICf文件以及指定程序存储地址空间

    EFM32在IAR开发环境下指定代码,数据的存储空间 为了便于后续的项目升级,管理,需要对代码,数据的存储空间加以设定,也在网上找下相关的资料,笔者水平有限, 如下内容不一定完全正确,如有错误之后,还 ...

  5. 痞子衡嵌入式:在IAR开发环境下为工程开启CRC完整性校验功能的方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下为工程开启CRC完整性校验功能的方法. CRC校验在嵌入式领域里的应用非常广,比如在通信领域,CRC检验值可以作为数据 ...

  6. 痞子衡嵌入式:在IAR开发环境下将关键函数重定向到RAM中执行的三种方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下将关键函数重定向到RAM中执行的三种方法. 嵌入式项目里应用程序代码正常是放在 Flash 中执行的,但有时候也需要将 ...

  7. 痞子衡嵌入式:在IAR开发环境下将整个源文件代码重定向到任意RAM中的方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下将整个源文件代码重定向到任意RAM中的方法. 痞子衡旧文 <在IAR下将关键函数重定向到RAM中执行的方法> ...

  8. Hi3518EV200平台ADC多通道采样

    Hi3518EV200平台ADC多通道采样流程 Hi3518EV200 ADC 本文针对Hi3518EV200平台处理器,通过ADC单次采样方式,实现对多通道(1~4通道)ADC进行采样控制.本文仅仅 ...

  9. scala IDE for Eclipse开发Spark程序

    1.开发环境准备 scala IDE for Eclipse:版本(4.6.1) 官网下载:http://scala-ide.org/download/sdk.html 百度云盘下载:链接:http: ...

随机推荐

  1. Codeforces 526G Spiders Evil Plan

    由于做的时候看的是中文题面,第一遍写就被卡题意了:还以为每一条都要过x,那么就是一道动态树根选择2y个叶子的奇怪题目 交完0分gg,才发现题目看错了╮(╯▽╰)╭ the node containin ...

  2. centOS6.5 usr/src/kernels下为空

    用uname -r查看内核版本为 2.6.32-431.el6.x86_64 usr/src/kernels下为空 需要执行两个安装 yum install kernel-headers yum in ...

  3. CD4051的切换时间

    CD4051:1 2 4 5 12 13 14 15  8个选择IO输入/输出端:3:I/O6:片选低电平有效,搞定平所有通道不通9 10 11:地址选择:功能:通过地址选择译码8个中的某个通道与3脚 ...

  4. 求N之下的所有素数

    No.1 f=lambda n: [x for x in range(1,n) if not [y for y in range(2,x) if x%y ==0 ]] No.2 def prime(n ...

  5. 修改php默认的FastCGI模式为ISAPI模式的方法

    一.到www.php.net中下载PHP的ZIP文件包.注意版本要对应. 二.将sapi目录中的:php4isapi.dll复制到c:\php目录中. 三.进入虚拟主机管理平台的"网站管理& ...

  6. 我的NopCommerce之旅(3): 系统代码结构分析

    一.概述 基于MVC 二.详细描述 \Libraries\Nop.Core 核心类,包括缓存.事件.帮助类.业务对象(订单.客户实体) \Libraries\Nop.Data 数据访问层,采用Enti ...

  7. React Native开发时devices offline和手机不能晃动的处理

    1. adb device 显示 devices offline 可能重启adb server: $ adb kill-server $ adb start-server 2. 华为等手机不能 晃动显 ...

  8. cacti图形字符乱码

    环境:最小化centos+cacti 问题:图形监控界面字符全部乱码,如下图 解决方法:从windows下面拷贝一个ttf文件到/usr/share/fonts下面,刷新页面,字符就正常显示了.

  9. 利用kubeadm快速部署k8s

    内外网络互通 [root@k8s-1 ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) 配置k8syum仓库,及Dock ...

  10. 如何关闭OSX 10.11 SIP (System Integrity Protection)

    http://www.jianshu.com/p/0572336a0771 注意:SIP功能是Apple在OSX上推出的系统完整性保护功能,对于普通MAC用户来说是一项安全保护功能,如果不了解他的作用 ...