stm32普通IO口捕獲PWM的高電平

2021-07-25 07:25:49 字數 3985 閱讀 7360

思路:普通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 ...