494656431 494656431
我会一直在,纵使寂寞开成海
关注数: 3 粉丝数: 106 发帖数: 1,961 关注贴吧数: 32
STM32 ADC问题 #include "stm32f10x.h" #include "stdio.h" #define ADC1_DR_Address ((u32)0x4001244C) vu16 ADC_ConvertedValue; void RCC_cfg(void) { ErrorStatus HSEStartUpStatus;//定义外部高速晶体启动状态枚举变量 RCC_DeInit();//复位RCC外部设备寄存器到默认值 RCC_HSEConfig(RCC_HSE_ON); //打开外部高速晶振 HSEStartUpStatus = RCC_WaitForHSEStartUp();//等待外部高速时钟准备好 if(HSEStartUpStatus == SUCCESS)//外部高速时钟已经准别好 { RCC_HCLKConfig(RCC_SYSCLK_Div1);//配置AHB(HCLK)时钟=SYSCLK RCC_PCLK2Config(RCC_HCLK_Div1); //配置APB2(PCLK2)钟=AHB时钟 RCC_PCLK1Config(RCC_HCLK_Div2);//配置APB1(PCLK1)钟=AHB 1/2时钟 RCC_ADCCLKConfig(RCC_PCLK2_Div4);//配置ADC时钟=PCLK2 1/4 RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //配置PLL时钟 == 外部高速晶体时钟*9 RCC_ADCCLKConfig(RCC_PCLK2_Div4);//配置ADC时钟= PCLK2/4 RCC_PLLCmd(ENABLE);//使能PLL时钟 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET){} //等待PLL时钟就绪 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//配置系统时钟 = PLL时钟 while(RCC_GetSYSCLKSource() != 0x08){}//检查PLL时钟是否作为系统时钟 } RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);//使能DMA时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOC, ENABLE);//使能ADC1,GPIOC时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO, ENABLE);//打开GPIOD和AFIO时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);//使能串口2时钟 } void GPIO_cfg() { //设置PD5为推挽输出模式(USART串口输出) GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO初始化结构体 GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);//使能GPIO端口映射USART2 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//选择PIN4 PIN5 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //引脚频率50M GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//引脚设置推挽输出 GPIO_Init(GPIOD, &GPIO_InitStructure);//配置GPIOD //配置PD6为浮空输入 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOD, &GPIO_InitStructure); //配置PC4为模拟输入 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOC, &GPIO_InitStructure); } void USART_cfg() { USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate = 9600;//baudrate= 9600 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件流控制 USART_InitStructure.USART_Mode = USART_Mode_Rx|USART_Mode_Tx;//收发开启 USART_InitStructure.USART_Parity =USART_Parity_No;//无校验 USART_InitStructure.USART_StopBits = USART_StopBits_1;//停止位 USART_InitStructure.USART_WordLength = USART_WordLength_8b;//八位数据 USART_Init(USART2, &USART_InitStructure);//初始化串口2 USART_Cmd(USART2, ENABLE);//串口2使能 } void DMA_cfg() { DMA_InitTypeDef DMA_InitStructure; DMA_DeInit(DMA1_Channel1); //起始和目标地址 DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address; DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue; //数据宽度为16 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_HalfWord; //外设地址和内存地址都不增加 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable; DMA_InitStructure.DMA_BufferSize = 1;//缓存为1 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;//外设为源 DMA_InitStructure.DMA_M2M = DISABLE;//禁止M2M DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;//循环模式 DMA_InitStructure.DMA_Priority = DMA_Priority_High;//高优先级 DMA_Init(DMA1_Channel1,&DMA_InitStructure);//配置DMA1_Channel1 DMA_Cmd(DMA1_Channel1, ENABLE); //使能DMA1通道1 } void ADC_cfg() { ADC_InitTypeDef ADC_InitStructure; ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC1和ADC2独立 ADC_InitStructure.ADC_ScanConvMode = ENABLE;//多通道扫描模式 ADC_InitStructure.ADC_ContinuousConvMode =ENABLE;//连续工作 ADC_InitStructure.ADC_ExternalTrigConv =ADC_ExternalTrigConv_None;//软件可控 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//字节右对齐 ADC_InitStructure.ADC_NbrOfChannel = 1;//规则通道数目 ADC_Init(ADC1,&ADC_InitStructure);//配置ADC1 //ADC1选择信道14,rank1,采样时间28.5个周期 ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 1, ADC_SampleTime_28Cycles5); ADC_DMACmd(ADC1, ENABLE);//使能ADC1模块DMA ADC_Cmd(ADC1,ENABLE);//使能ADC1 ADC_ResetCalibration(ADC1); //重置ADC1校准寄存器 while(ADC_GetResetCalibrationStatus(ADC1));//等待ADC1校准重置完成 ADC_StartCalibration(ADC1);//开始ADC1校准 while(ADC_GetCalibrationStatus(ADC1));//等待ADC1校准完成 ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能ADC1软件开始转换 } // void Put_String(u8 *p) // { // while(*p) // { // USART_SendData(USART2, *p++); // while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET) // { // // } // } // } void Delay (vu32 nCount) { for(; nCount != 0; nCount--); } int fputc(int ch , FILE *f) { /*---------------在调用本函数对printf函数重定向前,先要对USART1进行配置------------------*/ //1、将ch送给USART1 USART_SendData(USART2 , ch) ; //2、等待发送完毕 while( USART_GetFlagStatus(USART2 , USART_FLAG_TC) == RESET ) { } //3、返回ch return(ch) ; } void Put_String(u8 *p) { while(*p) { USART_SendData(USART2, *p++); while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET) { } } } int main () { SystemInit(); RCC_cfg(); GPIO_cfg(); USART_cfg(); DMA_cfg(); ADC_cfg(); while(1) { Delay(0x8FFFF); printf("ADC = %X Volt = %d mv\r\n", ADC_ConvertedValue, ADC_ConvertedValue*3300/4096); } } 检测一直是0 ,PC4 PIN调高还是一样
求人看下 看门狗无法中断问题 #include "stm32f10x.h" //配置时钟 void RCC_cfg() { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO ,ENABLE); } //配置中断通道和优先级 void NVIC_cfg() { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel=WWDG_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } //配置IO void GPIO_cfg() { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStructure); } //配置IO为中断入口 void EXTI_cfg() { EXTI_InitTypeDef EXTI_InitStruct; //清空标志位 EXTI_ClearFlag(EXTI_Line2); //配置IO GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource2); //配置入口 EXTI_InitStruct.EXTI_Line = EXTI_Line2; EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising_Falling; EXTI_InitStruct.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStruct); } //配置看门狗 void WWDG_cfg(u8 Counter,u8 windowvalue, u32 fp) { WWDG_SetPrescaler(WWDG_Prescaler_8); WWDG_SetWindowValue(windowvalue); WWDG_SetCounter(Counter); WWDG_Enable(Counter); WWDG_ClearFlag(); WWDG_EnableIT(); WWDG_ClearFlag(); } //狗中断 void WWDG_IRQHandler(void) { GPIO_SetBits(GPIOB,GPIO_Pin_1); WWDG_ClearFlag(); } //外部中断 void EXTI2_IRQHandler(void) { u16 n; n=0xffff; while(!GPIO_ReadInputData(GPIOC)); while(n--); EXTI_ClearFlag(EXTI_Line2); } int main() { u8 wr,tr; RCC_cfg(); NVIC_cfg(); EXTI_cfg(); GPIO_cfg(); WWDG_cfg(0x7F, 0x6F, 8); while(1) { wr=WWDG->CFR&0x7f;//取窗口值 tr=WWDG->CR&0x7f;//取WWDG->CR值 if(wr>tr) { WWDG->CR = 0x7f; } } }
帮忙看下一个外部中断程序,uvision不响应 #include "stm32f10x.h" //ÅäÖÃʱÖÓ void RCC_cfg() { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO ,ENABLE); } //ÅäÖÃÖжÏͨµÀºÍÓÅÏȼ¶ void NVIC_cfg() { // void NVIC_DeInit(void); // NVIC_DeInit(); NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } //ÅäÖÃIO //PC2 PC3 PC5 Íⲿ°´¼üÊäÈë, //PB5 PD3 PD6 Êä³öÐźŠvoid GPIO_cfg() { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_5 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD,&GPIO_InitStructure); } //ÅäÖÃIOΪÖжÏÈë¿Ú void EXTI_cfg() { EXTI_InitTypeDef EXTI_InitStruct; //Çå¿Õ±ê־λ EXTI_ClearFlag(EXTI_Line2); EXTI_ClearFlag(EXTI_Line3); EXTI_ClearFlag(EXTI_Line5); //ÅäÖÃIO GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_Pin_2); GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_Pin_3); GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_Pin_5); //ÅäÖÃÈë¿Ú EXTI_InitStruct.EXTI_Line = EXTI_Line2|EXTI_Line3|EXTI_Line5; EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising_Falling; EXTI_InitStruct.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStruct); } //ÑÓʱ³ÌÐò void Delay(void) { u8 i; for(i=0xff;i>0;i--); } //ÖжÏÏìÓ¦³ÌÐò void EXTI5_IRQHandler() { GPIO_SetBits(GPIOB,GPIO_Pin_5); EXTI_ClearFlag(EXTI_Line2); } void EXTI3_IRQHandler() { GPIO_SetBits(GPIOD,GPIO_Pin_3); EXTI_ClearFlag(EXTI_Line3); } void EXTI2_IRQHandler() { GPIO_SetBits(GPIOD,GPIO_Pin_6); EXTI_ClearFlag(EXTI_Line5); } int main() { RCC_cfg(); NVIC_cfg(); GPIO_cfg(); EXTI_cfg(); while(1); }
首页 1 2 下一页