实验原理:

  STM32内部集成三个12位ADC,iCore1S的所有电源经过

电阻分压或者直接接入STM32的ADC的输出通道内,输入电流

经过高端电流检测芯片ZXCT1009F输入到ADC的输入通道内,

从而实现电源监控功能。   

实验现象:

  iCore1S双核心板红色LED常亮,串口向终端输出电源监

控的数据。

核心代码:

int main(void)
{ /* USER CODE BEGIN 1 */
int i;
/* USER CODE END 1 */ /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();//ÍâÉè³õʼ»¯ /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */
SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */
MX_GPIO_Init();
MX_ADC3_Init();
MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */
LED_RED_ON; usart1.printf("\x0c"); usart1.printf("\033[1;32;40m"); usart1.printf("\r\n\r\nhello! I am iCore1S!\r\n\r\n\r\n"); /* USER CODE END 2 */ /* Infinite loop */
/* USER CODE BEGIN WHILE */
while ()
{
/* USER CODE END WHILE */
for(i = ;i < ;i++); //ADC采集
for(i = ;i < ;i++){
adc.read(i);
} usart1.printf(" [V] %4.2fV, ",adc.value[] * );
usart1.printf("[I] %3.0fmA , ",adc.value[] / * .);
usart1.printf("[1.2V] %4.2fV, ",adc.value[]);
usart1.printf("[3.3V] %4.2fV, ",adc.value[] * );
usart1.printf("[2.5V] %4.2fV\r",adc.value[] * ); /* USER CODE BEGIN 3 */ }
/* USER CODE END 3 */ }
static int read_adc(int channel)
{
int i,k;
unsigned long int temp[] = {};
unsigned long int value;
unsigned short int data[];
ADC_ChannelConfTypeDef channel_config;
unsigned char channel_remap[] = {ADC_CHANNEL_4,ADC_CHANNEL_5,ADC_CHANNEL_6,ADC_CHANNEL_7,ADC_CHANNEL_8}; channel_config.Channel = channel_remap[channel];
channel_config.Rank = ;
channel_config.SamplingTime = ADC_SAMPLETIME_239CYCLES_5; for(k = ;k < ;k++){
for(i = ;i < ;i++){ HAL_ADC_ConfigChannel(&hadc3,&channel_config);
HAL_ADC_Start(&hadc3); while(!__HAL_ADC_GET_FLAG(&hadc3,ADC_FLAG_EOC));
data[i] = HAL_ADC_GetValue(&hadc3);
} sort(data,); for(i = ;i < ;i++){
temp[k] += data[i];
} temp[k] = temp[k] / ;
} value = ;
for(k = ;k < ;k++){
value += temp[k];
}
value /= ; adc.value[channel] = value * ADC_REF / ; return value;
}

源代码下载链接:

链接:http://pan.baidu.com/s/1eRScqK6 密码:0tmn

最新文章

  1. c语言:printf系列的函数
  2. PL/Cool
  3. Python类的特点 (3) :静态方法与类方法
  4. Ubuntu14.04环境下Samba报错排错过程
  5. JAVA-- M选N的组合算法
  6. HDU1518 Square(DFS)
  7. c#图像处理入门(-bitmap类和图像像素值获取方法) 转
  8. 数据切分——Mysql分区表的建立及性能分析
  9. 一个简单的php站点配置
  10. VxWorks操作系统shell命令与调试方法总结
  11. 移动端web开发中对点透的处理,以及理解fastclick如何做到去除300ms延迟
  12. tuxedo开发
  13. LINQ to Entities 不识别方法“System.DateTime AddDays(Double)
  14. aop技术理解使用
  15. Facebook ATC弱网环境搭建
  16. php opcodes运行原理
  17. awk词频统计
  18. 迭代器和增强for
  19. 使用STM32CubeMX生成RTC工程[闹钟中断]
  20. GitHub上最火的40个Android开源项目(二)

热门文章

  1. 用python批量生成简单的xml文档
  2. Python3基础之基本问题
  3. python——append与extend
  4. 通过Queue方法实现进程间通信
  5. 20172302《程序设计与数据结构》实验三 敏捷开发与XP实践报告
  6. JavaScript ES6特性
  7. Saltstack 安装 命令
  8. 机器学习笔记(4):多类逻辑回归-使用gluton
  9. Android开源项目SlidingMenu学习(二)
  10. 使用 ssmtp 於 shell 透過 Gmail 寄信