2626
2727#include "pins_arduino.h"
2828#include "./include/driver/wm_adc.h"
29+ #include "Arduino.h"
2930
3031#define ADC_NORMAL (0U) /*polling mode*/
3132#define ADC_IT (1U) /*interrupt mode*/
@@ -85,9 +86,9 @@ int analogRead(uint8_t pin) /*all ADC channel range is 0-2.4V*/
8586 {
8687 channel_index = (uint16_t )g_APinDescription [pin ].ulAnalogChannel >> 8 ; //ADC_ANA_CR_CH_0
8788
88- if (g_pinStatus [pin ] != PIN_ATTR_ANALOG )
89+ if (g_pinStatus [pin ] != ANALOG_INPUT )
8990 {
90- g_pinStatus [pin ] = PIN_ATTR_ANALOG ;
91+ g_pinStatus [pin ] = ANALOG_INPUT ;
9192
9293 adcPinState [channel_index ].pin = pin ;
9394 adcPinState [channel_index ].hadc .Instance = ADC ;
@@ -118,6 +119,29 @@ int analogRead(uint8_t pin) /*all ADC channel range is 0-2.4V*/
118119 return val & adcResolution ;
119120}
120121
122+
123+ void disable_adc (uint8_t pin ) /*disable pin's ADC channel function*/
124+ {
125+ #if (ADC_MODE == ADC_IT )
126+ HAL_NVIC_DisableIRQ (ADC_IRQn );
127+ #else
128+
129+ // uint8_t channel_index = 0;
130+ ADC_HandleTypeDef hadc ;
131+ if (g_APinDescription [pin ].ulPinAttribute & PIN_ATTR_ANALOG )
132+ {
133+ // channel_index = (uint16_t)g_APinDescription[pin].ulAnalogChannel >> 8; //ADC_ANA_CR_CH_0
134+ hadc .Instance = ADC ;
135+ hadc .Init .channel = g_APinDescription [pin ].ulAnalogChannel ; //channel[ch];
136+ hadc .Init .freq = 1000 ;
137+ hadc .offset = ADC_DEFAULT_OFFSET ;
138+ }
139+
140+ HAL_ADC_Stop (& hadc );
141+ #endif
142+ }
143+
144+
121145void HAL_ADC_ConvCpltCallback (ADC_HandleTypeDef * hadc )
122146{
123147}
@@ -148,7 +172,6 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc)
148172{
149173 if (hadc -> Instance == ADC )
150174 {
151- __HAL_RCC_ADC_CLK_ENABLE ();
152175 // __HAL_RCC_GPIO_CLK_ENABLE();
153176
154177 //ADC_CHANNEL_0 : PA1
@@ -184,7 +207,7 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc)
184207 __HAL_AFIO_REMAP_ADC (GPIOA , GPIO_PIN_2 );
185208 }
186209#if (ADC_MODE == ADC_IT )
187- // 如果用到中断方式需要使能中断
210+ // å¦‚æžœç”¨åˆ°ä¸æ–æ–¹å¼éœ€è¦ä½¿èƒ½ä¸æ–?
188211 HAL_NVIC_SetPriority (ADC_IRQn , 0 );
189212 HAL_NVIC_EnableIRQ (ADC_IRQn );
190213#endif
@@ -199,7 +222,7 @@ void HAL_ADC_MspDeInit(ADC_HandleTypeDef *hadc)
199222 {
200223 if (hadc -> Init .channel == adcPinState [i ].hadc .Init .channel )
201224 {
202- if (g_pinStatus [adcPinState [i ].pin ] == PIN_ATTR_ANALOG )
225+ if (g_pinStatus [adcPinState [i ].pin ] == ANALOG_INPUT )
203226 {
204227 g_pinStatus [adcPinState [i ].pin ] = PIN_ATTR_NONE ;
205228 HAL_GPIO_DeInit (GPIOA , adcPinState [i ].pin );
@@ -217,13 +240,10 @@ void analogWrite(uint32_t pin, uint32_t val)
217240 uint8_t channel_index = 0 ;
218241 if (g_APinDescription [pin ].ulPinAttribute & PIN_ATTR_PWM ) /*this pin has pwm attr*/
219242 {
220- printf ("init pin {%d}\r\n" , pin );
221243 channel_index = (uint16_t )g_APinDescription [pin ].ulPWMChannel ;
222- if (g_pinStatus [pin ] != PIN_ATTR_PWM ) /*need init this pin first*/
244+ if (g_pinStatus [pin ] != PWM_OUT ) /*need init this pin first*/
223245 {
224-
225- g_pinStatus [pin ] = PIN_ATTR_PWM ;
226-
246+ g_pinStatus [pin ] = PWM_OUT ;
227247 pwmPinState [channel_index ].pin = pin ;
228248 pwmPinState [channel_index ].hpwm .Instance = PWM ;
229249 pwmPinState [channel_index ].hpwm .Init .AutoReloadPreload = PWM_AUTORELOAD_PRELOAD_ENABLE ;
@@ -232,8 +252,7 @@ void analogWrite(uint32_t pin, uint32_t val)
232252 pwmPinState [channel_index ].hpwm .Init .Prescaler = 312 ; //40M / 312 = 12.8K //分频 1M
233253 pwmPinState [channel_index ].hpwm .Init .Period = 255 ; // 12.8K / 256 = 500HZ
234254 pwmPinState [channel_index ].hpwm .Init .Pulse = 100 ; // (100/256)% DUTY
235- pwmPinState [channel_index ].hpwm .Init .OutMode = PWM_OUT_MODE_INDEPENDENT ; //通道独立输出
236-
255+ pwmPinState [channel_index ].hpwm .Init .OutMode = PWM_OUT_MODE_INDEPENDENT ;
237256 pwmPinState [channel_index ].hpwm .Channel = channel_index ;
238257 HAL_PWM_Init (& (pwmPinState [channel_index ].hpwm ));
239258 HAL_PWM_Start (& (pwmPinState [channel_index ].hpwm ), channel_index );
@@ -248,6 +267,21 @@ void analogWrite(uint32_t pin, uint32_t val)
248267 }
249268}
250269
270+ void disable_pwm (uint8_t pin ) /*disable pin's ADC channel function*/
271+ {
272+ uint8_t channel_index = 0 ;
273+ PWM_HandleTypeDef hpwm ;
274+ if (g_APinDescription [pin ].ulPinAttribute & PIN_ATTR_PWM ) /*this pin has pwm attr*/
275+ {
276+ channel_index = (uint16_t )g_APinDescription [pin ].ulPWMChannel ;
277+
278+ hpwm .Instance = PWM ;
279+ hpwm .Channel = channel_index ;
280+ }
281+ HAL_PWM_Stop (& hpwm , channel_index );
282+ }
283+
284+
251285void HAL_PWM_MspInit (PWM_HandleTypeDef * hpwm )
252286{
253287 for (int i = 0 ; i < PWM_COUNT ; i ++ )
@@ -256,8 +290,6 @@ void HAL_PWM_MspInit(PWM_HandleTypeDef *hpwm)
256290 {
257291 if (g_pinStatus [pwmPinState [i ].pin ] == PIN_ATTR_PWM )
258292 {
259- __HAL_RCC_PWM_CLK_ENABLE ();
260-
261293 if (hpwm -> Channel == PWM_CH0 )
262294 {
263295 __HAL_AFIO_REMAP_PWM0 (g_APinDescription [pwmPinState [i ].pin ].pPort , g_APinDescription [pwmPinState [i ].pin ].ulPin );
0 commit comments