
最近在研究STM32开发板,遇到个很奇怪的问题问题,查了很多资料都找不到原因,我想做一个利用按键来控制一下pwm波的开关,按键用的是外部中断EXTI0,GPIOA_0,PWM用的是TIM1_CH1,单独在KEIL环境下都可以运行,可是组合起来时在keil中就编译不了了。(以下是代码)! l' x* i! i4 e6 D& ?4 L% v 解决途径:编译软件没安装在C盘,且安装文件不包含汉字。 int main(void) { /* config the sysclock to 72m */ SystemInit();5 @* z9 v- N; Y" W, d 8 A4 m( Q% P6 A) K, F RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 | RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitTypeDef GPIO_InitStructure;. Y( P. g4 j% p. @+ T GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;4 z# ~) t& {2 J2 E- I, C7 p GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;& V# u1 } _$ U- O GPIO_Init(GPIOA, &GPIO_InitStructure); TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;1 p' ]) F* G6 x/ q6 n TIM_OCInitTypeDef TIM_OCInitStructure; uint16_t CCR1_Val = 2047;2 D4 U( r$ q% u4 _ TIM_TimeBaseStructure.TIM_Prescaler = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; `! F( J1 a* D+ p" Z TIM_TimeBaseStructure.TIM_Period = 4095;( w2 u3 ]+ U9 d: a TIM_TimeBaseStructure.TIM_ClockDivision = 0;/ P* V7 X! F0 e; ^+ J! O/ T TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;. T9 r0 ~" f& y. O! {# S2 L2 _ $ O; F$ T6 e$ J8 n; T TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;8 T8 C- Z$ m4 }$ M& v, w/ r3 f TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;; X$ A; d: Z8 n+ U* q9 Q TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; TIM_OCInitStructure.TIM_Pulse = CCR1_Val;8 Z" W7 m' P6 D3 U: [ TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;4 P+ V0 R- d3 F TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High; TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set; TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset; TIM_OC1Init(TIM1, &TIM_OCInitStructure);6 c/ K( L. f, p% \! c * [6 z6 g( a3 a4 d TIM_Cmd(TIM1, ENABLE); 1 v+ q- l/ ?- Z TIM_CtrlPWMOutputs(TIM1, ENABLE); / q5 R$ J I; S! K& O/ R EXTI_PA0_Config(); 6 y- D, a9 C) B* e7 X5 b7 P5 T while(1) 6 G$ M' {+ X7 ?+ R9 B$ M {4 {9 v2 T) U$ b0 h }7 ?$ D8 T/ v% G$ i2 v$ r } " r1 q3 U3 i! s5 h //下面的是个子函数 void NVIC_Configuration(void)4 |: n. G5 r7 ]6 f x7 ]0 l2 N { NVIC_InitTypeDef NVIC_InitStructure;0 T( D7 u7 }) W$ x' K' W0 F' f /* Configure one bit for preemption priority */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);0 T$ q. I/ c- h9 A % b* c) X [) y" L, a /* 配置P[A|B|C|D|E]0为中断源 */& I7 i3 @1 p4 R2 m# s9 r NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn ;6 l4 l3 v9 b$ f1 n. W" b# [ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); }, D x7 U9 e6 r) k4 I /* * 函数名:EXTI_PB0_Config' K9 d. o5 ~; ?8 \/ c0 u( X1 @% L * 描述 :配置 PB0 为线中断口,并设置中断优先级 * 输入 :无, {. s, w6 h; {/ e. `( {7 { J2 h9 @ * 输出 :无) x: |* R R" n3 u3 e3 F! l * 调用 :外部调用0 i; o5 L! O1 R. U+ J3 v: v */ void EXTI_PA0_Config(void) {. B4 k2 W9 x3 y9 @$ z. c4 ~" d1 [ GPIO_InitTypeDef GPIO_InitStructure; ! w& o; q- O$ [1 [- t1 e2 F EXTI_InitTypeDef EXTI_InitStructure;5 r0 u5 G. U9 v# [* H /* config the extiline(PB0) clock and AFIO clock */4 ^3 L0 n+ [/ {9 s1 |% a( @- J RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);7 X) j# h! N1 _; { /* config the NVIC(PB0) */ NVIC_Configuration();- c. ]0 u* r7 Y2 }% O. ] /* EXTI line gpio config(PB0) */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ; 2 ?. |; f$ S. T: E GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; // 上拉输入9 [* N% s% o7 X5 J5 [ GPIO_Init(GPIOA, &GPIO_InitStructure); /* EXTI line(PB0) mode config */ GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); EXTI_InitStructure.EXTI_Line = EXTI_Line0; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;& D% _( j X- Y d EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿中断 EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); F( J6 }' j2 m8 W# ` } void EXTI0_IRQHandler(void) {# D$ m( y3 d) n0 a+ k# y, E: g+ S4 w5 A if(EXTI_GetITStatus(EXTI_Line0) != RESET) //确保是否产生了EXTI Line中断* L- E' v J0 R5 c { GPIO_InitTypeDef GPIO_InitStructure;0 w' H' i) Q p5 ~ } GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 ;' |9 ]4 y6 {( a m GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); } } |