STM32 F10X系列 PB4等JTAG引脚作普通IO复用方法。
##学习笔记
一.相关表格
1.PB3,PB4,PA13,PA14,PA15引脚可根据上表复用成普通IO口。在mcu复位的时候这几个引脚被作为jtag的功能。当我们要使用这些引脚作为普通的I/O时必须进行引脚的功能复用。
二.I/O复用方法:
1.使能所要复用的I/O时钟(例子以PB4为例):
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
2.配置I/o口:
GPIO_InitTypeDef GPIO_Initstructure;//结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//上面的复用I/O时钟写在这里
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//开启afio时钟,见3.
GPIO_Initstructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出
GPIO_Initstructure.GPIO_Pin=GPIO_Pin_4;
GPIO_Initstructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE);//这是复用要用到的函数,先不管见4.。
GPIO_Init(GPIOB,&GPIO_Initstructure);//gpio初始化函数初始化b口。
3.开启AFIO时钟
在更改AFIO寄存器时要使用该时钟,平常最好都写上以防万一。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//开启afio时钟
4.开启复用功能
GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE);
GPIO_Remap_SWJ_NoJTRST:为相应宏定义(见表35,上面):001
此时PB4口可以作为普通I/O口使用了。
三.GPIO_PinRemapConfig中的相关宏定义:
(表35)
GPIO_Remap_SWJ_NoJTRST —> 001
GPIO_Remap_SWJ_JTAGDisable ----> 010
GPIO_Remap_SWJ_Disable ----> 100 //PA13/14/15 PB3/4均可用;
四.具体代码实现总结:
例子为蓝桥杯的cet711板:PB4连接蜂鸣器,所以要复用PB4口完成对蜂鸣器的初始化。
void beep_init(void)//
{
GPIO_InitTypeDef GPIO_Initstructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);//使能PB口和AFIO口的时钟
GPIO_Initstructure.GPIO_Mode=GPIO_Mode_Out_PP;//推完复用输出
GPIO_Initstructure.GPIO_Pin=GPIO_Pin_4;//选择pb4口
GPIO_Initstructure.GPIO_Speed=GPIO_Speed_50MHz;//速度
GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE);//开启复用功能
GPIO_Init(GPIOB,&GPIO_Initstructure);//GPIO初始化
}
红胡子395: 谢谢
CSDN-Ada助手: 多亏了你这篇博客, 解决了问题: https://ask.csdn.net/questions/8010323, 请多输出高质量博客, 帮助更多的人
计网小白i: 在开头那部分里
a_bcdefg123456: 通道间中断堵塞,不管是不是通道之间堵塞,这种方式下,每个中断都必须及时的并准确的响应,否则 丢失一次匹配 就会丢失一个定时器周期
小星星星球: 只使用CH1与CH3,或CH2与CH4