你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32L432 Nucleo开发板评测(4)差分ADC  

[复制链接]
wenyangzeng 提问时间:2016-7-18 21:15 /
本帖最后由 wenyangzeng 于 2017-1-3 13:41 编辑

STM32L432 Nucleo开发板评测(1

评测2:初试STM32L432    :   (4楼)

评测3:可编程增益运放PGA:(5楼)

评测(4)差分ADC              (6楼)

      有幸收到ST社区寄来ST公司最新推出的STM32L432Nucleo开发板进行评测。
    开发板的包装继承ST系列开发板包装风格:

STM32L432.JPG

图1 STM32L432 Nucleo开发板
主芯片是M4系列
ATM32L432KCU632PINS
ARM Cortex-M480MHZ
256-KB Flash,64-KBSRAM
Extensionconnectors:Arduino Nano
EmbeddedST-LINK/V2-1 debugger/Programmer
Mbed-enabled

正面.JPG
  正面STM32L432KBU6


背面.JPG
    背面 STLINK/V2-1

IMG_1275.JPG
  内包装印刷将这个芯片在开发板上的引脚顺序都标出来,方便使用

     STM32L4系列将微控制器能效和性能提升到新的高度。为简化设计、提高应用灵活性,新系列微控制器引入新的外设封装组合。
    卓越的性能和能效源优势来自于智能架构特性,例如外设电源电压独立调节、可设置多速内部时钟以及数据批量处理模式(BAM)、自适应实时(ART)加速器(ARTAcceleratorTM)。此外,包括超低功耗8nA关机在内的多模电源管理有助于最大限度地提升能效。
    STM32L432使100 DMIPS的ARM® Cortex®-M4处理器内核性能实现闪存需求最高256KB的轻型微控制器应用。         
    STM32L432的一个亮点是配备没有外置晶体振荡器即可工作的全速USB控制器、模拟外设、音频功能和无晶体USB控制器;此外,还增加一个加密加速器。
    无论是保护穿戴式设备或家庭自动化控制器等物联网产品(IoT)的数据安全,还是给工业或医疗设备增加多功能外设和通信接口,STM32L4的附加功能为设计人员扩大了选择范围,从而提升了设计灵活性。STM32L432KBU6内置128KB闪存和64KB 静态随机存储器(SRAM)。参考样品价格约为2.13美元。
STM32L432的例程en.stm32cubel4.zip:

STM32L432的MDK5驱动:
下载这个软件包有点类似打热线电话一样,要看你的运气了。
      STM32L432 Nucleo开发板的评测心得今后将逐一与大家分享。
(待续)










收藏 4 评论22 发布时间:2016-7-18 21:15

举报

22个回答
wenyangzeng 回答时间:2016-7-20 21:52:59
评测(4)差分ADC
  打开STM32CublMX,准备对ADC_IN5(PA0)进行ADC配置:
DIFFERENTIAL.jpg
配置过程中发现STM32L432的ADC具有差分ADC功能(图中蓝色方框),ADC差分方式能大大提高ADC转换结果的信噪比。在这颗小小的芯片上居然集成了差分ADC,实在太难得了。
当ADC_IN5配置成差分ADC输入时,ADC_IN6(PA1)自动配对成反相差分输入,差分运放与STM32L432简化连接见下图:

OPA.jpg
同时为ADC配置了DMA。
  1. ADC配置
  2. #include "adc.h"
  3. #include "gpio.h"
  4. #include "dma.h"
  5. /* USER CODE BEGIN 0 */
  6. #define ADC_CONVERTED_DATA_BUFFER_SIZE   ((uint32_t)  64)
  7. extern uint16_t   aADCxConvertedData[ADC_CONVERTED_DATA_BUFFER_SIZE];
  8. /* USER CODE END 0 */

  9. ADC_HandleTypeDef hadc1;
  10. DMA_HandleTypeDef hdma_adc1;

  11. /* ADC1 init function */
  12. void MX_ADC1_Init(void)
  13. {
  14.   ADC_ChannelConfTypeDef sConfig;

  15.     /**Common config
  16.     */
  17.   hadc1.Instance = ADC1;
  18.          if (HAL_ADC_DeInit(&hadc1) != HAL_OK)
  19.   {
  20.     /* ADC de-initialization Error */
  21.     Error_Handler();
  22.   }
  23.   hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
  24.   hadc1.Init.Resolution = ADC_RESOLUTION_12B;
  25.   hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  26.   hadc1.Init.ScanConvMode = DISABLE;;//ADC_SCAN_DISABLE;
  27.   hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
  28.   hadc1.Init.LowPowerAutoWait = DISABLE;
  29.   hadc1.Init.ContinuousConvMode = ENABLE; //DISABLE;
  30.   hadc1.Init.NbrOfConversion = 1;
  31.   hadc1.Init.DiscontinuousConvMode = DISABLE;
  32.   hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  33.   hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  34.   hadc1.Init.DMAContinuousRequests = ENABLE;
  35.   hadc1.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
  36.   hadc1.Init.OversamplingMode = DISABLE;
  37.   if (HAL_ADC_Init(&hadc1) != HAL_OK)
  38.   {
  39.     Error_Handler();
  40.   }
  41. if (HAL_ADCEx_Calibration_Start(&hadc1, ADC_SINGLE_ENDED) !=  HAL_OK)
  42.   {
  43.     Error_Handler();
  44.   }
  45.     /**Configure Regular Channel
  46.     */
  47.   sConfig.Channel = ADC_CHANNEL_5;
  48.   sConfig.Rank = 1;
  49.   sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
  50.   sConfig.SingleDiff = ADC_DIFFERENTIAL_ENDED;               //这里配置成差分方式
  51.   sConfig.OffsetNumber = ADC_OFFSET_NONE;
  52.   sConfig.Offset = 0;
  53.   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  54.   {
  55.     Error_Handler();
  56.   }
  57. if (HAL_ADC_Start_DMA(&hadc1,
  58.                         (uint32_t *)aADCxConvertedData,
  59.                         ADC_CONVERTED_DATA_BUFFER_SIZE
  60.                        ) != HAL_OK)
  61.   {
  62.     Error_Handler();
  63.   }
  64. }

  65. void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)
  66. {

  67.   GPIO_InitTypeDef GPIO_InitStruct;
  68.   if(adcHandle->Instance==ADC1)
  69.   {
  70.   /* USER CODE BEGIN ADC1_MspInit 0 */

  71.   /* USER CODE END ADC1_MspInit 0 */
  72.     /* Peripheral clock enable */
  73.     __HAL_RCC_ADC_CLK_ENABLE();
  74.   
  75.     /**ADC1 GPIO Configuration   
  76.     PA0-CK_IN     ------> ADC1_IN5
  77.     PA1     ------> ADC1_IN6
  78.     */
  79.     GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
  80.     GPIO_InitStruct.Mode = GPIO_MODE_ANALOG_ADC_CONTROL;
  81.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  82.     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  83.     /* Peripheral DMA init*/
  84.   
  85.     hdma_adc1.Instance = DMA1_Channel1;
  86.     hdma_adc1.Init.Request = DMA_REQUEST_0;
  87.     hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY;
  88.     hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE;
  89.     hdma_adc1.Init.MemInc = DMA_MINC_ENABLE;
  90.     hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
  91.     hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
  92.     hdma_adc1.Init.Mode = DMA_CIRCULAR;
  93.     hdma_adc1.Init.Priority = DMA_PRIORITY_MEDIUM;//DMA_PRIORITY_LOW;
  94.     if (HAL_DMA_Init(&hdma_adc1) != HAL_OK)
  95.     {
  96.       Error_Handler();
  97.     }

  98.     __HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc1);

  99.   /* USER CODE BEGIN ADC1_MspInit 1 */

  100.   /* USER CODE END ADC1_MspInit 1 */
  101.   }
  102. }
复制代码
  1. DMA配置
  2. void MX_DMA_Init(void)
  3. {
  4.   /* DMA controller clock enable */
  5.   __HAL_RCC_DMA1_CLK_ENABLE();

  6.   /* DMA interrupt init */
  7.   /* DMA1_Channel1_IRQn interrupt configuration */
  8.   HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 1, 0);
  9.   HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);

  10. }
复制代码
  1. DMA中断
  2. void DMA1_Channel1_IRQHandler(void)
  3. {
  4.   /* USER CODE BEGIN DMA1_Channel1_IRQn 0 */

  5.   /* USER CODE END DMA1_Channel1_IRQn 0 */
  6.   HAL_DMA_IRQHandler(&hdma_adc1);
  7.   /* USER CODE BEGIN DMA1_Channel1_IRQn 1 */

  8.   /* USER CODE END DMA1_Channel1_IRQn 1 */
  9. }
复制代码
现在,开发板可以工作在差分ADC了。确实是1片性价比很高的M4!

adc.jpg



相关推荐:

NUCLEO-L432KC官方技术文档

STM32 L4系列超低功耗微控制器官方介绍

STM32L4单片机参考设计

STM32单片机官方开发工具一览

评分

参与人数 1ST金币 +5 收起 理由
zero99 + 5

查看全部评分

wenyangzeng 回答时间:2016-7-19 21:42:12
评测3:可编程增益运放PGA
    STM32L432的一个亮点就是内置了PGA模块(可编程增益运放),有机会接触这款芯片,当然要亲身体验一下这个新功能的特性:
1、 DMA提供采样信号(正弦波)给DAC。
2、 DAC模块产生一个正弦波信号DAC_OUT1(PA4)供OPAMP1放大。
3、OPAMP1放大输出在PA3,增益为2或4。
4、OPAMP增益动态改变而OPAMP启用。
5、使用OPAMP正常和低功率模式(采样保持模式)。
6、OPAMP的低功率模式(DAC)也可以使用Cortex内核保持在睡眠模式。
7、Cortex内核可以被设置成睡眠模式没有DMA中断处理。
测试步骤:
1、示波器一个测试笔连接到CN4的PA4(A3-DAC_OUT1 引脚),显示生成的DAC正弦波信号(800mVp-p)。(DACouptut = OPAMP输入)。
2、示波器另一个测试笔连接连接到CN4的PA3(A2-OPAMP_OUT1)引脚,显示OPAMP输出波形。
3、PB0配置成下降沿中断的输入开关,短接到地时用于演示功能步骤的切换。
4、编译下载STM32Cube_FW_L4_V1.5.0\Projects\STM32L432KC-Nucleo\Examples\OPAMP\OPAMP_PGA工程,示波器显示DAC_OUT1OPAMP输出波形,对地短路PB0,可以有4种演示模式:
    -The tests steps are:
     - Step 0:
         DAC:     normal power mode
         OPAMP:   normal power mode - gain = 2
         DMA:     circular mode - DMA half transfer IThandled by Cortex
         Cortex:  run mode
     - Step 1:
         DAC:     normal power mode
         OPAMP:   normal power mode - gain = 4
         DMA:     circular mode - DMA half transfer IThandled by Cortex
         Cortex:  run mode
     - Step 2:
         DAC:     Low power mode
         OPAMP:   normal power mode - gain = 4
         DMA:     circular mode - DMA half transfer - no IThandled by Cortex
         Cortex:  run mode
      - Step 3:
         DAC:     Low power mode
         OPAMP:   Low power mode - gain = 4
         DMA:     circular mode - DMA half transfer - no IThandled by Cortex
         Cortex:  sleep mode
     - Step 4:
         DAC:     Low power mode
         OPAMP:   Low power mode - gain = 2
         DMA:     circular mode - DMA half transfer - no IThandled by Cortex
         Cortex:  sleep mode
IMG_1276.JPG
1  增益=2
IMG_1277.JPG
2 增益=4  可以看出,运放输出底部还是有点失真了。

    值得一提的是,OPAMP_PGA工程里产生正弦波的数据表数组里的数据有误,不能得到正确的正弦波波形,请按照下面修改:
const uint16_t Sine12bit[32] ={0,9,38,86,149,227,315,411,
                                           511,611,707,796,847,937,984,1014,
                                           1023,1014,984,937,847,796,707,611,
                                            511,411,315,227,149,86,38,9};
通过本次实验,体会了STM32L432PGA的灵活性和方便性,




相关推荐:
STM32 L4系列超低功耗微控制器官方介绍

NUCLEO-L432KC官方技术文档

STM32L4单片机参考设计

STM32单片机官方开发工具一览
wenyangzeng 回答时间:2016-7-19 15:55:16
STM32L432 Nucleo开发板评测(2)初试STM32L432

首先为MDK5下载并安装STM32L432驱动Keil.STM32L4xx.DFP.1.2.0.pack
STM32L4xx.DFP.1.2.0.pack.jpg
接着下载并解压stm32cubel4.zip
打开STM32Cube_FW_L4_V1.5.0\Projects\STM32L432KC-Nucleo\Examples\GPIO\GPIO_IOToggle工程。
MDK5.jpg
器件选项中STM32L432KC已经被选中
ST-LINK.jpg
点击Debug选项中选中ST-Link Debugger->Settings
ST-LINK/V2-1激活,在SW Device Name栏可以看到 ARM CreSightSW-DP已被识别。
UTILITES.jpg
点击Utilities确定 器件的256KB Flash
至此,STM32L432KC编译环境已经建立。
编译、下载GPIO_IOToggle,这个演示工程点亮PB3所驱动的LD3,现在绿色LED闪烁亮起。
下载过程发现每当更换一个新工程编译后,都要再点击一下Debugger->Settings,才能下载,否则就报错。不知何故。

accelerating 回答时间:2016-7-18 21:40:59
又是一年春来到 回答时间:2016-7-19 14:42:23
学习了
pythonworld 回答时间:2016-7-21 07:53:07
很详细!
Longmiao 回答时间:2016-7-25 17:38:22
内容很多,痕详细
wu1169668869 回答时间:2016-8-2 19:31:50
增益只能配置2或者4范围有点小啊
wolfgang 回答时间:2016-8-3 10:09:06
wu1169668869 发表于 2016-8-2 19:31
增益只能配置2或者4范围有点小啊

毕竟是低功耗,  功率放大不是长项。
wu1169668869 回答时间:2016-8-3 12:25:13
wolfgang2015 发表于 2016-8-3 10:09
毕竟是低功耗,  功率放大不是长项。

低功耗是没错,

PGA只是小信号的放大,后级没有大功率负载
不算功率放大啊

总之有还是省了点事
625355677@qq.co 回答时间:2016-8-3 12:34:21
很详细,学习了
anny 回答时间:2016-8-3 13:18:58
看了楼主的介绍相信是个很好的芯片,谢谢分享
beebird 回答时间:2016-8-8 21:29:27
楼主写的很不错!赞
可编程增益运放PGA和差分ADC都测好了
Luckybird 回答时间:2016-9-10 18:31:56
厉害   楼主   新人学习了   这次也申请到了   只是刚接触嵌入式   入手困难   望大家指导
12下一页

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版