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

STM32L051 ADC多通道 和 低功耗串口冲突问题

[复制链接]
aderson 提问时间:2017-11-5 21:41 /
悬赏20ST金币已解决
使用STM32L051因为要使用低功耗模式,用Cube配置的,ADC多通道是可以正常工作了,现在要加入低功耗串口,两个模块单独调试都是正常的,现在组合到一起,发现初始化串口时,会造成ADC的DMA一直触发,然后就会一直卡在那边

最佳答案

查看完整内容

把初始化顺序调整下看看,MX_LPUART1_UART_Init 放到 MX_GPIO_Init 后面,然后再DMA和ADC初始化
收藏 1 评论10 发布时间:2017-11-5 21:41

举报

10个回答
lawesly 回答时间:2017-11-5 21:41:19
把初始化顺序调整下看看,MX_LPUART1_UART_Init 放到 MX_GPIO_Init 后面,然后再DMA和ADC初始化

评分

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

查看全部评分

aderson 回答时间:2017-11-5 21:44:36
  1.   MX_GPIO_Init();
  2.   MX_LPUART1_UART_Init();
  3.   MX_ADC_Init();
  4.   /* USER CODE BEGIN 2 */

  5.         HAL_UART_Transmit(&hlpuart1, (uint8_t *)"Init OK", 7, 10);
  6.         HAL_Delay(100);
  7.   /* USER CODE END 2 */
  8.         uint16_t adv = 0;
  9.   /* Infinite loop */
  10.   /* USER CODE BEGIN WHILE */
  11.   while (1)
  12.   {
  13.   /* USER CODE END WHILE */
  14.        
  15.   /* USER CODE BEGIN 3 */
  16.                 adv = Get_Adc(1);
  17.                 Led_SW(0);
  18.                 HAL_Delay(1000);
  19.                 Led_SW(1);
  20.                 HAL_Delay(1000);
  21.                 //User_Uart_Send((uint8_t*)"AAAAAAAAAAAAAA");
  22.                 HAL_UART_Transmit(&hlpuart1, (uint8_t *)&adv, 2, 1000);
  23.         }
  24.   /* USER CODE END 3 */

  25. }
复制代码

主循环

  1. ADC && 串口
  2. static void MX_ADC_Init(void)
  3. {

  4.   ADC_ChannelConfTypeDef sConfig;

  5.     /**Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
  6.     */
  7.   AdcHandle.Instance = ADC1;
  8.   
  9.   AdcHandle.Init.OversamplingMode      = DISABLE;
  10.   
  11.   AdcHandle.Init.ClockPrescaler        = ADC_CLOCK_SYNC_PCLK_DIV1;
  12.   AdcHandle.Init.LowPowerAutoPowerOff  = DISABLE;
  13.   AdcHandle.Init.LowPowerFrequencyMode = ENABLE;
  14.   AdcHandle.Init.LowPowerAutoWait      = DISABLE;
  15.    
  16.   AdcHandle.Init.Resolution            = ADC_RESOLUTION_12B;
  17.   AdcHandle.Init.SamplingTime          = ADC_SAMPLETIME_7CYCLES_5;
  18.   AdcHandle.Init.ScanConvMode          = ADC_SCAN_DIRECTION_FORWARD;
  19.         //AdcHandle.Init.ScanConvMode                                  = DISABLE;
  20.   AdcHandle.Init.DataAlign             = ADC_DATAALIGN_RIGHT;
  21.   AdcHandle.Init.ContinuousConvMode    = DISABLE;
  22.   AdcHandle.Init.DiscontinuousConvMode = ENABLE;
  23.   AdcHandle.Init.ExternalTrigConvEdge  = ADC_EXTERNALTRIGCONVEDGE_NONE;
  24.   AdcHandle.Init.EOCSelection          = ADC_EOC_SINGLE_CONV;
  25.   AdcHandle.Init.DMAContinuousRequests = DISABLE;
  26.   if (HAL_ADC_Init(&AdcHandle) != HAL_OK)
  27.   {
  28.     _Error_Handler(__FILE__, __LINE__);
  29.   }

  30.         if (HAL_ADCEx_Calibration_Start(&AdcHandle, ADC_SINGLE_ENDED) != HAL_OK)
  31.   {
  32.     Error_Handler();
  33.   }
  34.     /**Configure for the selected ADC regular channel to be converted.
  35.     */
  36.   sConfig.Channel = ADC_CHANNEL_0;
  37.   sConfig.Rank = 1;
  38.         if (HAL_ADC_ConfigChannel(&AdcHandle, &sConfig) != HAL_OK)
  39.   {
  40.     _Error_Handler(__FILE__, __LINE__);
  41.   }

  42.     /**Configure for the selected ADC regular channel to be converted.
  43.     */
  44.   sConfig.Channel = ADC_CHANNEL_1;
  45.   sConfig.Rank = 2;
  46.         if (HAL_ADC_ConfigChannel(&AdcHandle, &sConfig) != HAL_OK)
  47.   {
  48.     _Error_Handler(__FILE__, __LINE__);
  49.   }

  50.     /**Configure for the selected ADC regular channel to be converted.
  51.     */
  52.   sConfig.Channel = ADC_CHANNEL_2;
  53.   sConfig.Rank = 3;
  54.         if (HAL_ADC_ConfigChannel(&AdcHandle, &sConfig) != HAL_OK)
  55.   {
  56.     _Error_Handler(__FILE__, __LINE__);
  57.   }

  58.     /**Configure for the selected ADC regular channel to be converted.
  59.     */
  60.   sConfig.Channel = ADC_CHANNEL_3;
  61.         sConfig.Rank = 4;
  62.   if (HAL_ADC_ConfigChannel(&AdcHandle, &sConfig) != HAL_OK)
  63.   {
  64.     _Error_Handler(__FILE__, __LINE__);
  65.   }

  66. }

  67. /* LPUART1 init function */
  68. static void MX_LPUART1_UART_Init(void)
  69. {

  70.   hlpuart1.Instance = LPUART1;
  71.   hlpuart1.Init.BaudRate = 9600;
  72.   hlpuart1.Init.WordLength = UART_WORDLENGTH_8B;
  73.   hlpuart1.Init.StopBits = UART_STOPBITS_1;
  74.   hlpuart1.Init.Parity = UART_PARITY_NONE;
  75.   hlpuart1.Init.Mode = UART_MODE_TX_RX;
  76.   hlpuart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  77.   hlpuart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  78.   hlpuart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  79.   if (HAL_UART_Init(&hlpuart1) != HAL_OK)
  80.   {
  81.     _Error_Handler(__FILE__, __LINE__);
  82.   }

  83. }
复制代码
废鱼 回答时间:2017-11-6 08:58:01
楼主,ADC采集用的有和串口配置冲突的引脚吗?
aderson 回答时间:2017-11-6 10:16:28
安 发表于 2017-11-6 08:58
楼主,ADC采集用的有和串口配置冲突的引脚吗?

没有冲突啊,A0 - A3 是AD输入, 串口是B10 B11
废鱼 回答时间:2017-11-6 11:09:19
楼主方便把工程传上来吗?大家有代码好帮忙分析一下
aderson 回答时间:2017-11-6 12:56:34
本帖最后由 adersonl 于 2017-11-6 13:00 编辑

工程来了

L51ADCT2.zip

下载

17.68 MB, 下载次数: 515, 下载积分: ST金币 -1

aderson 回答时间:2017-11-6 13:01:18
安 发表于 2017-11-6 11:09
楼主方便把工程传上来吗?大家有代码好帮忙分析一下

非常感谢版主出力,工程已传
废鱼 回答时间:2017-11-7 10:30:54
看了一下,感觉没什么问题,手头也没有L051的板子帮忙测试。
aderson 回答时间:2017-11-10 11:38:53
lawesly 发表于 2017-11-9 14:17
把初始化顺序调整下看看,MX_LPUART1_UART_Init 放到 MX_GPIO_Init 后面,然后再DMA和ADC初始化 ...

后来也试过了,貌似没有什么用,不知道是哪里的问题。。我现在先不用DMA了,正常的。。
缘法 回答时间:2018-9-20 11:43:41
aaaaaaaaaaa
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版