STM32F103学习笔记(一)

最近某创和某配互撕,10×10双层板打样低至5RMB,这波薅羊毛的机会当然不能轻易放过啦,这不赶紧搞出一块STM32F103C8T6最小系统板出来玩玩,顺便学习一下STM32,当做入门吧(以前一直用国产的某51单片机),没有被占用的IO口全引出,焊接技术不够,酒精、高压水枪来凑,用高难度酒精洗去助焊剂,用高压水枪冲掉卡在缝隙里的锡渣,可当我可是检测IO功能时却发现好几个IO口不听从召唤,难到是凑技术时出了问题?赶紧来查查。

不查不得了,一查吓一跳,最终发现原来不只PB3、PB4,还有PA13-15这五个引脚不是普通的IO口,用作JTAG/SWD仿真器的调试接口,引脚描述如《STM32参考手册》中所示:

同时,这些引脚主功能(复位后)的功能如下如所示:

这些引脚只有重定义功能后才能作为普通的IO口使用,所以我们需要对这些引脚进行配置的时候开启AFIO复用时钟。

步骤一:时钟配置时同时开启AFIO复用时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);//打开PB口时钟,AFIO复用时钟

步骤二:重映射,这里有三种模式可以选择

1.GPIO_Remap_SWJ_JTAGDisable         /*!< JTAG-DP Disabled and SW-DP Enabled */  

    即能用PB3,PB4,PA15做普通IO,PA13&14用于SWD调试

2.GPIO_Remap_SWJ_Disable                /*!< Full SWJ Disabled (JTAG-DP + SW-DP) */

     5个引脚全为普通引脚,但不能再用JTAG&SWD仿真器调试,只能用st-link调试

3.GPIO_Remap_SWJ_NoJTRST      /*!< Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST */

    PB4可为普通IO口,JTAG&SWD正常使用,但JTAG没有复位
 

GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);//五个引脚当做普通IO口

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //用PB3、PB4、PA15做普通IO,PA13、14用于SWD调试

GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE); //只配置PB4可为普通IO口:

//选择其中一种即可

全段代码

void Init_LEDpin(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能PA端口时钟

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);//打开PA口时钟,AFIO复用时钟
    GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //用PB3、PB4、PA15做普通IO,PA13、14用于SWD调试

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;// 端口配置
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;//推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//IO口速度为50MHz
    GPIO_Init(GPIOA, &GPIO_InitStructure);//根据设定参数初始化GPIOA
	
    GPIO_SetBits(GPIOA,GPIO_Pin_15);//初始化设置为0
}
发布了18 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_38053385/article/details/94971103