实验原理:

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

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

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

从而实现电源监控功能。   

实验现象:

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

控的数据。

核心代码:

  1. int main(void)
  2. {
  3.  
  4. /* USER CODE BEGIN 1 */
  5. int i;
  6. /* USER CODE END 1 */
  7.  
  8. /* MCU Configuration----------------------------------------------------------*/
  9.  
  10. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  11. HAL_Init();//ÍâÉè³õʼ»¯
  12.  
  13. /* USER CODE BEGIN Init */
  14.  
  15. /* USER CODE END Init */
  16.  
  17. /* Configure the system clock */
  18. SystemClock_Config();
  19.  
  20. /* USER CODE BEGIN SysInit */
  21.  
  22. /* USER CODE END SysInit */
  23.  
  24. /* Initialize all configured peripherals */
  25. MX_GPIO_Init();
  26. MX_ADC3_Init();
  27. MX_USART1_UART_Init();
  28.  
  29. /* USER CODE BEGIN 2 */
  30. LED_RED_ON;
  31.  
  32. usart1.printf("\x0c");
  33.  
  34. usart1.printf("\033[1;32;40m");
  35.  
  36. usart1.printf("\r\n\r\nhello! I am iCore1S!\r\n\r\n\r\n");
  37.  
  38. /* USER CODE END 2 */
  39.  
  40. /* Infinite loop */
  41. /* USER CODE BEGIN WHILE */
  42. while ()
  43. {
  44. /* USER CODE END WHILE */
  45. for(i = ;i < ;i++);
  46.  
  47. //ADC采集
  48. for(i = ;i < ;i++){
  49. adc.read(i);
  50. }
  51.  
  52. usart1.printf(" [V] %4.2fV, ",adc.value[] * );
  53. usart1.printf("[I] %3.0fmA , ",adc.value[] / * .);
  54. usart1.printf("[1.2V] %4.2fV, ",adc.value[]);
  55. usart1.printf("[3.3V] %4.2fV, ",adc.value[] * );
  56. usart1.printf("[2.5V] %4.2fV\r",adc.value[] * );
  57.  
  58. /* USER CODE BEGIN 3 */
  59.  
  60. }
  61. /* USER CODE END 3 */
  62.  
  63. }
  1. static int read_adc(int channel)
  2. {
  3. int i,k;
  4. unsigned long int temp[] = {};
  5. unsigned long int value;
  6. unsigned short int data[];
  7. ADC_ChannelConfTypeDef channel_config;
  8. unsigned char channel_remap[] = {ADC_CHANNEL_4,ADC_CHANNEL_5,ADC_CHANNEL_6,ADC_CHANNEL_7,ADC_CHANNEL_8};
  9.  
  10. channel_config.Channel = channel_remap[channel];
  11. channel_config.Rank = ;
  12. channel_config.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
  13.  
  14. for(k = ;k < ;k++){
  15. for(i = ;i < ;i++){
  16.  
  17. HAL_ADC_ConfigChannel(&hadc3,&channel_config);
  18. HAL_ADC_Start(&hadc3);
  19.  
  20. while(!__HAL_ADC_GET_FLAG(&hadc3,ADC_FLAG_EOC));
  21. data[i] = HAL_ADC_GetValue(&hadc3);
  22. }
  23.  
  24. sort(data,);
  25.  
  26. for(i = ;i < ;i++){
  27. temp[k] += data[i];
  28. }
  29.  
  30. temp[k] = temp[k] / ;
  31. }
  32.  
  33. value = ;
  34. for(k = ;k < ;k++){
  35. value += temp[k];
  36. }
  37. value /= ;
  38.  
  39. adc.value[channel] = value * ADC_REF / ;
  40.  
  41. return value;
  42. }

源代码下载链接:

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

【iCore1S 双核心板_ARM】例程八:ADC实验——电源监控的更多相关文章

  1. 【iCore1S 双核心板_ARM】例程五:IWDG看门狗实验——复位ARM

    实验原理: STM32内部包含独立看门狗,通过看门狗可以监控程序运行,程序错误 时,未在规定时间喂狗,自动复位ARM.本实验通过按键按下,停止喂狗, 制造程序运行 错误,从而产生复位 . 实验现象: ...

  2. 【iCore1S 双核心板_ARM】例程六:WWDG看门狗实验——复位ARM

    实验原理: STM32内部包含窗口看门狗,通过看门狗可以监控程序运行,程序错误 时,未在规定时间喂狗,自动复位ARM.本实验通过按键按下,停止喂狗, 制造程序运行 错误,从而产生复位 . 实验现象: ...

  3. 【iCore1S 双核心板_ARM】例程七:通用定时器实验——定时点亮LED

    实验原理: 通过STM32的三个GPIO口来驱动LED灯的三个通道:设定GPIO为推挽 输出模式,采用灌电流的方式与LED连接,输出高电平LED灭,输出低电平 LED亮,通过通用定时器TIM3实现50 ...

  4. 【iCore1S 双核心板_ARM】例程十八:SD_IAP_FPGA实验——更新升级FPGA

    实验现象及操作说明: 1.烧写程序成功,绿色ARM·LED灯点亮,三色FPGA·LED灯循环点亮,烧写失败,如果挂载SD卡失败,红灯快闪,如果打开文件失败,蓝灯快闪,读取文件指针移动失败,白灯点亮,升 ...

  5. 【iCore1S 双核心板_ARM】例程九:DAC实验——输出直流电压

    实验原理: STM32内部集成12位DAC,可以配置成12位或8位,DAC具有两个独立转换通道, 在双DAC模式下,DA转换可被配置成独立模式或工作模式,iCore1S中DAC参考电压为 2.5V.本 ...

  6. 【iCore1S 双核心板_ARM】例程十五:USB_HID实验——双向数据传输

    实验方法: 1.USB_HID协议免驱动,此例程不需要驱. 2.将跳线冒跳至USB_OTG,通过Micro USB 线将iCore1S USB-OTG接口与电脑相连. 3.打开上位机软件usb_hid ...

  7. 【iCore1S 双核心板_ARM】例程二十:UART_IAP_ARM实验——更新升级STM32

    实验现象及操作说明: 1.本例程共有两个代码包,APP和IAP,IAP程序功能实现将APP程序升级至STM32中. 2.直接上电或烧写程序将执行升级的APP应用程序. BIN升级文件产生方法: 1.编 ...

  8. 【iCore1S 双核心板_ARM】例程十一:RTC实时时钟实验——显示时间和日期

    实验现象: 核心代码: int main(void) { /* USER CODE BEGIN 1 */ RTC_DateTypeDef sDate; RTC_TimeTypeDef sTime; u ...

  9. 【iCore1S 双核心板_ARM】例程十三:SDIO实验——读取SD卡信息

    实验现象: 核心代码: int main(void) { /* USER CODE BEGIN 1 */ HAL_SD_TransferStateTypedef State; /* USER CODE ...

随机推荐

  1. SpringMVC框架09——@ResponseBody的用法详解

    @ResponseBody可以标注在方法上也可以标注在类上面.简单来说,当标注在方法上时,该方法的返回结果直接转成JSON格式:当标注在类上时,该类中的所有方法的返回结果都转换成JSON格式. 代码示 ...

  2. asp.net core模块学习

    一.配置管理 二.管道 三.认证与授权 四.MVCDemo 五.IdentityServer4 一.配置管理 1,读取内存配置 using System; using Microsoft.Extens ...

  3. prufer序列计数的一些结论

    \(prufer\)序列和完全图的生成树一一对应(考虑构造) 完全图的生成树个数为\(n^{n - 2}\) 满足第\(i\)个点的度数为\(d_i\)的生成树为\(\frac{n!}{\prod ( ...

  4. 卡特兰数 Catalan 笔记

    一.公式 卡特兰数一般公式 令h(0)=1,h(1)=1,catalan数满足递推式.h(n) = h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (n>= ...

  5. Java并发程序设计(十一)设计模式与并发之生产者-消费者模式

    设计模式与并发之生产者-消费者模式 生产者-消费者模式是一个经典的多线程设计模式.它为多线程间的协作提供了良好的解决方案.在生产者-消费者模式中,通常由两类线程,即若干个生产者线程和若干个消费者线程. ...

  6. while 、函数、参数

    while 循环 一个循环语句 表示当某个条件成立时就循环 不知道具体循环次数,但能确定循环的成立条件的时候用while循环 while 条件表达式: 语句块 例1 :如果年利率为6.7%,本利是每年 ...

  7. nginx编译安装on mac

    一.编译安装模块 如果是原有包中就有的模块,编译时, ./configure --with-xxx 就可以, 如果是第三方模块,可使用 --add-module, 如果有多个模块的话,只需要多次使用- ...

  8. POI HSSFCellStyle 设置 Excel 单元格样式

    POI中可能会用到一些需要设置EXCEL单元格格式的操作小结: 先获取工作薄对象: HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb ...

  9. phpmyadmin更改密码

  10. CSS3 Flex布局整理(三)-项目属性

    一.Flex布局中 Flex Item属性控制,可以指定显示顺序.剩余空间的放大,缩小.交叉轴的排列 1.order:定义项目的排列顺序,数值越小,排列越靠前,默认为0.类似z-index 2.fle ...