所用的工具
STM32F103C6T6最小系统板
Cubemx
keil
配置cubeMx
1.使能led引脚输出
![](https://img-blog.csdnimg.cn/img_convert/3769ca1d13fd281ed54e0ffd686bb5f1.png)
2.选择高速时钟晶振
![](https://img-blog.csdnimg.cn/img_convert/7344b70fbf0050f8d48c9e835dc1e45a.png)
3.Debug Settings和时钟树
![](https://img-blog.csdnimg.cn/img_convert/f36294ce99e25807784f13c220ff4424.png)
![](https://img-blog.csdnimg.cn/img_convert/aa79b7f19afa6f1f96eaa1e76df4c1f8.png)
4.使能ADC和ADC的引脚
![](https://img-blog.csdnimg.cn/img_convert/14178658f50dc60b31c5aa46f1f7dc7f.png)
5.使能串口1和串口中断以便传输电平数据
![](https://img-blog.csdnimg.cn/img_convert/44dc6d17fe6c2311b790e0373f948cc6.png)
6.选择mdk-arm,生成代码
![](https://img-blog.csdnimg.cn/img_convert/c53b35ba256bb87113ca82031db142e4.png)
keil代码
引入头文件,宏定义开灯和关灯函数
#include "stdio.h"
#define led_off() HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET)
#define led_on() HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET)
初始化ADC_Value和ADC_Volt
uint16_t ADC_Value=0,ADC_Volt=0;
uint8_t str_buff[64];//缓冲区
串口发送函数
void UR1_Send_Info()
{
sprintf((char *)str_buff,"Value:%d,volt:%d.%d%dV\r\n",ADC_Value,ADC_Volt/1000,(ADC_Volt%1000)/100,(ADC_Volt/10)%10);
HAL_UART_Transmit(&huart1 ,str_buff,sizeof(str_buff),10000);
}
点灯函数
void ADC0_Get_Value()
{
HAL_ADC_Start(&hadc1);
if(HAL_ADC_PollForConversion(&hadc1,10)== HAL_OK)
{
ADC_Value=HAL_ADC_GetValue(&hadc1);
ADC_Volt=ADC_Value*3300/4096;//3.3伏除2的十二次方(十二位的ADC_
}
UR1_Send_Info();
if(ADC_Volt>2000)
{
led_on();
}
else led_off();
HAL_ADC_Stop(&hadc1);
}
5.在while中调用
ADC0_Get_Value();
HAL_Delay(250);