思路:普通io口配置上公升沿下降沿觸發中斷,然後配置乙個定時器(週期大於等於pwm週期),在io口中斷中讀取定時器計數。
定時器不需要配置中斷
void
tim3_configuration
(void
)
io口配置
gpio_inittypedef gpio_initstructure
;
exti_inittypedef exti_initstructure
;
rcc_apb2periphclockcmd
(rcc_apb2periph_gpioe
,enable
);
rcc_apb2periphclockcmd
(rcc_apb2periph_afio
,enable
);
/*
pe9 ch1 dj // pe10 ch2 md // pe11 ch6 adjust */
gpio_initstructure
.gpio_pin
=gpio_pin_9
|gpio_pin_10
|gpio_pin_11
;
gpio_initstructure
.gpio_mode
=gpio_mode_ipd
;
gpio_initstructure
.gpio_speed
=gpio_speed_50mhz
;//50m
gpio_init
(gpioe,&
gpio_initstructure
);
gpio_extilineconfig
(gpio_portsourcegpioe
,gpio_pinsource9
);
gpio_extilineconfig
(gpio_portsourcegpioe
,gpio_pinsource10
);
gpio_extilineconfig
(gpio_portsourcegpioe
,gpio_pinsource11
);
exti_initstructure
.exti_line
=exti_line9
|exti_line10
|exti_line11
;
exti_initstructure
.exti_mode
=exti_mode_interrupt
;
exti_initstructure
.exti_trigger
=exti_trigger_rising_falling
;
exti_initstructure
.exti_linecmd
=enable
;
exti_init
(&exti_initstructure
);
io中斷配置
nvic_inittypedef nvic_initstructure
;
/* configure one bit for preemption priority */
nvic_prioritygroupconfig
(nvic_prioritygroup_2
);
/* pb6 pe5 interrupt */
nvic_initstructure
.nvic_irqchannel
=exti9_5_irqn
;
nvic_initstructure
.nvic_irqchannelpreemptionpriority =1
;//highest priority
nvic_initstructure
.nvic_irqchannelsubpriority =0
;
nvic_initstructure
.nvic_irqchannelcmd
=enable
;
nvic_init
(&nvic_initstructure
);
/* pe3 interrupt */
nvic_initstructure
.nvic_irqchannel
=exti15_10_irqn
;
nvic_initstructure
.nvic_irqchannelpreemptionpriority =0
;
nvic_initstructure
.nvic_irqchannelsubpriority =1
;
nvic_initstructure
.nvic_irqchannelcmd
=enable
;
nvic_init
(&nvic_initstructure
);
中斷處理函式(
counter_reload是20000,
tim_timebasestructure
.tim_period
=20000;)
void
exti9_5_irqhandler
(void
)
else
}
}
void
exti15_10_irqhandler
(void
)
else
}
elseif(
exti_getitstatus
(exti_line11)!=
reset
)
else
}
}
STM32之JTAG口作為普通IO使用
stm32f10x系列的mcu復位後,pa13 14 15 以及pb3 4預設配置為jtag功能。有時我們為了充分利用mcu i o口的資源,會把這些埠設定為普通i o口。jtag對應io jtms pa13 jtck pa14 jtdi pa15 jtdo pb3 jnrst pb4swd對應io...
STM32 中JTAG 引腳作為普通IO口設定方法
第一次畫stm32 的pcb 因為採用了swd 除錯,認為jtag的引腳pb3,pb4,沒有用到就做了普通io口,麻煩從此引起了。設定pb3,pb4均為輸出口,且輸出高電平,用萬用表測量,pb4為高,pb3不是高電平,在看mdk 中的暫存器值,pb3,pb4都是高啊?暫存器的值怎麼和實際的值不一樣了...
STM32 中JTAG 引腳作為普通IO口設定方法
看上面的資料手冊,可以知道一般的io口,其預設功能就是io口。可是pb3 pb4 pa13 pa14 pa15這幾個io口的預設功能是jtag功能,io口功能反而是他們的重對映功能。因此要把他們作為普通io口使用,要把他們的重對映功能開啟。只需要把pb3,pb4,pa15當成io使用,設定 rcc ...