打印
[其他ST产品]

STM32CubeMX教程-STM32L431RCT6开发板研究(ADC)

[复制链接]
楼主: lxs0026
手机看帖
扫描二维码
随时随地手机跟帖
21
lxs0026|  楼主 | 2022-6-30 23:42 | 只看该作者 |只看大图 回帖奖励 |倒序浏览

使用特权

评论回复
22
lxs0026|  楼主 | 2022-6-30 23:43 | 只看该作者
(3)生成代码。

使用特权

评论回复
23
lxs0026|  楼主 | 2022-6-30 23:44 | 只看该作者
三、在KEIL 5中编写代码
1、使用KEIL 5(MDK)打开项目工程文件
(1)找到刚才新建工程的存储路径,安装项目名称,打开项目工程。

使用特权

评论回复
24
lxs0026|  楼主 | 2022-6-30 23:46 | 只看该作者

使用特权

评论回复
25
lxs0026|  楼主 | 2022-6-30 23:47 | 只看该作者
2、 添加LED系统指示灯提示
(1)添加每隔500ms,LED1闪烁一次的系统提示,用于提示程序运行正常。、

使用特权

评论回复
26
lxs0026|  楼主 | 2022-6-30 23:49 | 只看该作者

使用特权

评论回复
27
lxs0026|  楼主 | 2022-6-30 23:49 | 只看该作者
3、添加ADC相关函数代码
(1)在adc.c文件中添加ADC采样函数,返回值即是ADC的电压值

使用特权

评论回复
28
lxs0026|  楼主 | 2022-6-30 23:50 | 只看该作者
/* USER CODE BEGIN 1 */

/* USER CODE BEGIN 3 */

/***************************
*函数名称:uint8_t z_ADC_sample(void)
*函数功能:获取ADC采样电压
*返回值:返回ADC电压
*备注:
****************************/
float z_ADC_sample(void)
{               
                uint16_t adc_value=0;                                                  //ADC采样
                float adc_vol=0.0f;                                                                //ADC采样后转换的电压
                for(int i = 0; i < 4096; i++)
    {
        if(i%1024 == 0)
        {
            /* 使用ADC采样 */
            HAL_ADC_Start(&hadc1);                        //启动ADC单次转换
            HAL_ADC_PollForConversion(&hadc1, 50);        //等待ADC转换完成
            adc_value = HAL_ADC_GetValue(&hadc1);         //读取ADC转换数据
                                          adc_vol = ((double)adc_value/4096)*3.3; //转换为电压忿
        }
    }
                return adc_vol;
}  

/* USER CODE END 1 */

使用特权

评论回复
29
lxs0026|  楼主 | 2022-6-30 23:51 | 只看该作者
(2)在adc.h中添加外部调用所需的函数声明。
/* USER CODE BEGIN Private defines */
float z_ADC_sample(void);
/* USER CODE END Private defines */

使用特权

评论回复
30
lxs0026|  楼主 | 2022-6-30 23:53 | 只看该作者
4、添加使用串口发送函数打印log的代码
(1)STM32 Cube函数库的串口发送函数分别为:

HAL_UART_Transmit、HAL_UART_Transmit_IT、HAL_UART_Transmit_DMA。本例程为串口发送函数HAL_UART_Transmit的展示。

HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef * huart, uint8_t * pData, uint16_t Size, uint32_t Timeout)
   
HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef * huart, uint8_t * pData, uint16_t Size)

HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef * huart, uint8_t * pData, uint16_t Size)

使用特权

评论回复
31
lxs0026|  楼主 | 2022-6-30 23:53 | 只看该作者
(2)添加串口函数发送数据的log。

 while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
                                HAL_Delay(500);
                                HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_0);                //控制LED1反转
                                HAL_UART_Transmit(&huart1, (uint8_t*)"hello world,this is Transmit function!\r\n", 100, 5);
  }
  /* USER CODE END 3 */

使用特权

评论回复
32
lxs0026|  楼主 | 2022-6-30 23:54 | 只看该作者
(3)在main.c中添加调用和打印语句。
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
                                HAL_Delay(500);
                                HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_0);                //设置LED1反转
                                adc_vol=z_ADC_sample();                      //获取ADC的vol倿
                                sprintf((char*)str_adc_vol,"hello world,this is adc test,adc==%.2f\r\n",adc_vol);                       
                                HAL_UART_Transmit(&huart1, (uint8_t*)str_adc_vol,100,5);
  }
  /* USER CODE END 3 */

使用特权

评论回复
33
lxs0026|  楼主 | 2022-6-30 23:54 | 只看该作者
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "stdio.h"
/* USER CODE END Includes */

使用特权

评论回复
34
lxs0026|  楼主 | 2022-6-30 23:55 | 只看该作者
5、设置编程仿真下载模式
(1)选择Options for target ...>>Debug>>J-Link/J-JTRACE Cortex,点击Settings>>选择Port(SW),可以看到搜索成功SW Device,表示芯片可用,可以下载。

使用特权

评论回复
35
lxs0026|  楼主 | 2022-6-30 23:56 | 只看该作者
2)点击Download(或者快捷键F8),即可下载程序。

使用特权

评论回复
36
lxs0026|  楼主 | 2022-6-30 23:56 | 只看该作者
3) 如果下载程序后,没有看到LED1灯闪烁,可以按下述方式设置一下(Reset and run表示下载后自动复位和重启运行)。或者重新彻底断电再次上电(或按开发板的Reset按键复位MCU即可)。

6263162bdc7a043026.png (125.29 KB )

6263162bdc7a043026.png

使用特权

评论回复
37
lxs0026|  楼主 | 2022-6-30 23:57 | 只看该作者
6、查看串口发送函数打印log效果
(1)设置串口助手参数为:115200、NONE、8、 1(和代码中串口初始化参数一致)。

(2)设置成功后,就可以看到串口打印的效果。每隔500ms闪烁LED1指示灯一次,且串口输出一个log。

备注:PA4接GND的时候,输出值为0V,PA4接3.3V的时候,输出值为3.25V。

使用特权

评论回复
38
lxs0026|  楼主 | 2022-6-30 23:58 | 只看该作者

使用特权

评论回复
39
Bblythe| | 2022-10-5 14:29 | 只看该作者

会以switch-case的方式出现

使用特权

评论回复
40
Pulitzer| | 2022-10-5 17:28 | 只看该作者

在实际的项目应用当中,单片机引脚的复用相当厉害

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则