GadgetSeed  0.9.6
adc.c
[詳解]
1 /** @file
2  @brief STM32 ADC(GPIO PC0)
3 
4  @date 2015.08.31
5  @author Takashi SHUDO
6 */
7 
8 #include "device.h"
9 #include "system.h"
10 
11 #include "stm32f4xx_hal.h"
12 
13 ADC_HandleTypeDef hadc1;
14 
15 /* ADC1 init function */
16 void MX_ADC1_Init(void)
17 {
18  ADC_ChannelConfTypeDef sConfig;
19 
20  hadc1.Instance = ADC1;
21  hadc1.Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV2;
22  hadc1.Init.Resolution = ADC_RESOLUTION12b;
23  hadc1.Init.ScanConvMode = DISABLE;
24  hadc1.Init.ContinuousConvMode = DISABLE;
25  hadc1.Init.DiscontinuousConvMode = DISABLE;
26  hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
27  hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
28  hadc1.Init.NbrOfConversion = 1;
29  hadc1.Init.DMAContinuousRequests = DISABLE;
30  hadc1.Init.EOCSelection = EOC_SINGLE_CONV;
31  HAL_ADC_Init(&hadc1);
32 
33  sConfig.Channel = ADC_CHANNEL_10;
34  sConfig.Rank = 1;
35  sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
36  HAL_ADC_ConfigChannel(&hadc1, &sConfig);
37 }
38 
39 void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
40 {
41  GPIO_InitTypeDef GPIO_InitStruct;
42  if(hadc->Instance==ADC1) {
43  __ADC1_CLK_ENABLE();
44 
45  GPIO_InitStruct.Pin = GPIO_PIN_0;
46  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
47  GPIO_InitStruct.Pull = GPIO_NOPULL;
48  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
49  }
50 }
51 
52 static int adc_register(struct st_device *dev, char *param)
53 {
54  MX_ADC1_Init();
55 
56  return 0;
57 }
58 
59 static int adc_open(struct st_device *dev)
60 {
61  return 0;
62 }
63 
64 static int adc_close(struct st_device *dev)
65 {
66  return 0;
67 }
68 
69 static int adc_read(struct st_device *dev, void *data, unsigned int size)
70 {
71  unsigned int val;
72  unsigned char *dp = data;
73  long rtn = 0;
74 
75  HAL_ADC_Start(&hadc1);
76  HAL_ADC_PollForConversion(&hadc1, 100);
77  val = HAL_ADC_GetValue(&hadc1);
78  HAL_ADC_Stop(&hadc1);
79 
80  if(size > 0) {
81  *dp = ((val >> 8) & 0xff);
82  dp ++;
83  rtn ++;
84  }
85 
86  if(size > 1) {
87  *dp = (val & 0xff);
88  rtn ++;
89  }
90 
91  return rtn;
92 }
93 
94 const struct st_device adc_device = {
95  .name = "adc",
96  .explan = "STM32F4 ADC(GPIO PC0)",
97  .register_dev = adc_register,
98  .open = adc_open,
99  .close = adc_close,
100  .read = adc_read,
101 };
システム固有初期化関連
デバイスドライバAPI
デバイスドライバ構造体
Definition: device.h:25
char name[MAX_DEVNAMELRN]
デバイス名文字列
Definition: device.h:26