2019-08-08 11:17发布
wxjhby 发表于 2017-11-7 08:32 是不是应该在检测到 产生DMA传输完成中断 以后 再去关ADC,不然DMA传输到一半就停了,或者你唤醒后把DMA初 ...
最多设置5个标签!
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All_NOUART;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//PB0/1 ??????????
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All_NOLED;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOB, &GPIO_InitStructure);
TIM_Cmd(TIM2, DISABLE);
TIM_Cmd(TIM4, DISABLE);
ADC_DMACmd(ADC1, DISABLE); //ʹÄÜADC1µÄDMA´«Ê䣬ADC_CR2λ8
//// ADC_SoftwareStartConvCmd(ADC1, DISABLE);//Èí¼þÆô¶¯ADת»»
ADC_Cmd(ADC1, DISABLE); //ʹÄܵÄADC1,ADC_CR2λ0
///////////////////////上面是睡眠前准备,关闭不用的IO,以及定时器
__wfi();
Sys_Sleepy();//开始睡眠
// ADC_DMACmd(ADC1, ENABLE); //ʹÄÜADC1µÄDMA´«Ê䣬ADC_CR2λ8
// ADC_Cmd(ADC1, ENABLE); //ʹÄܵÄADC1,ADC_CR2λ0
ADC_SoftwareStartConvCmd(ADC1, ENABLE);//Èí¼þÆô¶¯ADת»»
TIM_Cmd(TIM2, ENABLE);
TIM_Cmd(TIM4, ENABLE);
/*---------------------------下面是恢复----------------------------*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //Ä£ÄâÊäÈëÒý½Å
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //??????
GPIO_Init(GPIOB, &GPIO_InitStructure);
ADC_DMACmd(ADC1, ENABLE); //ʹÄÜADC1µÄDMA´«Ê䣬ADC_CR2λ8
ADC_Cmd(ADC1, ENABLE); //ʹÄܵÄADC1,ADC_CR2λ0
//PB0/1 ??????????
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //??????
// GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = LED_ERROR|LED_COMM;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(ERRO_PORT, &GPIO_InitStructure);
GPIO_SetBits(ERRO_PORT,LED_ERROR);
}
//这里是串口唤醒后开启AD
void USART1_IRQHandler(void)
{
// RX
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{modbus_rx_buff[MB_rx_offset] = USART_ReceiveData(USART1);
{ if((modbus_rx_buff[0] == BROADCAST_ADDR)||(modbus_rx_buff[0] ==MB_device_addr_by_setting))
{
MB_rx_offset++;
timer = TIMOUT;
if(MB_rx_offset<=1)
{
ADC_DMACmd(ADC1, ENABLE);
ADC_Cmd(ADC1, ENABLE);
}
TIM_Cmd(TIM3, ENABLE);
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
}
}
嗯,好主意,我试试,多谢
一周热门 更多>