STM32f1 中JTAG 引脚作为普通IO口设置方法以及STM32f4中的方法的不同
2015-09-06 09:11
495 查看
在stm32f1中,我们对于不用的jtag引脚做io使用时,会使用以下步骤:(下面内容来自网络)
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);
/**********************
1.执行端口重映射时,复用功能时钟得使能:RCC_APB2Periph_AFIO
2. 1. GPIO_Remap_SWJ_Disable
: !< Full SWJ Disabled (JTAG-DP + SW-DP)
此时PA13|PA14|PA15|PB3|PB4都可作为普通IO用了
为了保存某些调试端口,GPIO_Remap_SWJ_Disable也可选择为下面两种模式:
2. GPIO_Remap_SWJ_JTAGDisable
: !< JTAG-DP Disabled and SW-DP Enabled
此时PA15|PB3|PB4可作为普通IO用了
3. GPIO_Remap_SWJ_NoJTRST
: !< Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST
此时只有PB4可作为普通IO用了
**********************/
GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE); //使能禁止JTAG
//初始化GPIOB 推挽输出
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_3|GPIO_Pin_4);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB, GPIO_Pin_3|GPIO_Pin_4);
//初始化GPIOA 推挽输出
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA, GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
但是在stm32f4中不是这样的,STM32F4库函数中,已经取消了GPIO_PinRemapConfig()函数,对于复用功能,使用GPIO_PinAFConfig()函数了!
但是在GPIO_PinAFConfig()函数已经没有禁止JTAG/SW等选项了,而是复用到AF0~AF15线上,其中AF0是系统功能,STM32F4复位后JTAG对应的管脚的对应的功能就是AF0,(GPIO_AF_MCO=0) 所以这句可以不用:GPIO_PinAFConfig( , ,GPIO_AF_MCO);
直接配置GPIOx_MODER为输出,或输入模式即可,但是注意:STM32F4复位后JTAG对应的管脚的GPIOx_MODER值是0x02,即 复用功能!
所以直接配置GPIOx_MODER为所需的模式就可以了!
所以f4中,我们使用不用的jtag脚只需像平常使用其他io一样配置就好了
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);
/**********************
1.执行端口重映射时,复用功能时钟得使能:RCC_APB2Periph_AFIO
2. 1. GPIO_Remap_SWJ_Disable
: !< Full SWJ Disabled (JTAG-DP + SW-DP)
此时PA13|PA14|PA15|PB3|PB4都可作为普通IO用了
为了保存某些调试端口,GPIO_Remap_SWJ_Disable也可选择为下面两种模式:
2. GPIO_Remap_SWJ_JTAGDisable
: !< JTAG-DP Disabled and SW-DP Enabled
此时PA15|PB3|PB4可作为普通IO用了
3. GPIO_Remap_SWJ_NoJTRST
: !< Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST
此时只有PB4可作为普通IO用了
**********************/
GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE); //使能禁止JTAG
//初始化GPIOB 推挽输出
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_3|GPIO_Pin_4);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB, GPIO_Pin_3|GPIO_Pin_4);
//初始化GPIOA 推挽输出
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA, GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
但是在stm32f4中不是这样的,STM32F4库函数中,已经取消了GPIO_PinRemapConfig()函数,对于复用功能,使用GPIO_PinAFConfig()函数了!
但是在GPIO_PinAFConfig()函数已经没有禁止JTAG/SW等选项了,而是复用到AF0~AF15线上,其中AF0是系统功能,STM32F4复位后JTAG对应的管脚的对应的功能就是AF0,(GPIO_AF_MCO=0) 所以这句可以不用:GPIO_PinAFConfig( , ,GPIO_AF_MCO);
直接配置GPIOx_MODER为输出,或输入模式即可,但是注意:STM32F4复位后JTAG对应的管脚的GPIOx_MODER值是0x02,即 复用功能!
所以直接配置GPIOx_MODER为所需的模式就可以了!
所以f4中,我们使用不用的jtag脚只需像平常使用其他io一样配置就好了
相关文章推荐
- HTML5视频控件
- hdu5328 Problem Killer(dp)
- java对redis的基本操作
- 日期格式问题NLS_DATE_FORMAT = ''yyyy-mm-dd HH24:MI:SS''
- eclipse ubuntu error
- 使用php-timeit估计php函数的执行时间
- 感恩之心
- CSS3渐变
- Android Studio如何更改JDK和SDK的路径?
- 从C++到java
- jetty服务器访问系统的域名
- 总线——i2c协议
- 用无线网络进行Android开发中的调试
- 2015 9月6日 工作计划与执行
- 二维数组的访问方法
- Javascript实现快速排序(Quicksort)的算法详解
- 源码推荐(9.06):collectionView集合视图展开二级视图,可自定义的 iOS 价格日历
- 脚踏实地勤奋刻苦——我想要的生活是什么
- 去耦电容的大小的选择
- 从图片中提取html格式的布局