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

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

[复制链接]
adersonl 提问时间: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

查看全部评分

adersonl 回答时间: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采集用的有和串口配置冲突的引脚吗?
adersonl 回答时间:2017-11-6 10:16:28
安 发表于 2017-11-6 08:58
楼主,ADC采集用的有和串口配置冲突的引脚吗?

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

工程来了

L51ADCT2.zip

下载

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

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

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

后来也试过了,貌似没有什么用,不知道是哪里的问题。。我现在先不用DMA了,正常的。。
12下一页

所属标签

相似问题

官网相关资源

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