22集 JLINK在線調(diào)試方法與技巧 Cortex-M3內(nèi)核含硬件調(diào)試模塊,支持復(fù)雜的調(diào)試操作。硬件調(diào)試模塊允許內(nèi)核在取指(指令斷點)或訪問數(shù)據(jù)(數(shù)據(jù)斷點)時暫停。內(nèi)核暫停時,內(nèi)核內(nèi)部狀態(tài)和系統(tǒng)的外部狀態(tài)都是可以查詢的。完成查詢后,內(nèi)核和外設(shè)可以被復(fù)原,程序?qū)⒗^續(xù)執(zhí)行。 支持兩種調(diào)試接口:SW串行接口(2線) JTAG調(diào)試接口(5線) 需要注意的是,由于上電默認(rèn)為JTMS/SWDIO模式,所以PA13\PA14\PA15\PB3\PB4都不能直接當(dāng)成GPIO使用。可以通過 GPIO_PinRemapConfig() 來關(guān)閉或開啟JTAG-DP\SW-DP,從而可以使用這些GPIO。 這集不方便用文字描述,都注重實踐性。
23集 端口復(fù)用和端口重映射 一、端口復(fù)用 STM32有很多的內(nèi)置外設(shè),這些外設(shè)的引腳都是GPIO復(fù)用的。也就是說,一個GPIO如果可以復(fù)用為內(nèi)置外設(shè)的功能引腳,那么當(dāng)這個GPIO作為內(nèi)置外設(shè)使用的時候,就叫做端口復(fù)用。 例如串口1的發(fā)送接受引腳是PA9\PA10,當(dāng)我們需要用串口1時,就需要設(shè)置PA9\PA10復(fù)用為串口1功能的發(fā)送接收引腳。這就是端口復(fù)用。 二、端口復(fù)用的配置方法(PA9\PA10配置為串口1為例子) 1、使能GPIO端口時鐘、使能串口時鐘 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); 2、配置端口的模式 每一種外設(shè)對端口的模式都不太一樣,需要參考《STM32中文參考手冊 V10》P110的表格 //PA9 復(fù)用推挽輸出 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); //PA10 浮空輸入 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); 三、端口重映射 每個內(nèi)置外設(shè)都有根據(jù)外設(shè)的需要,都會有相應(yīng)數(shù)量的輸入輸出引腳,例如I2C就需要兩個引腳,一般這些引腳的輸出端口都是固定不變的,但為了讓設(shè)計工程師可以更好的安排引腳的走向和功能,在STM32中引入了外設(shè)引腳重映射的概念,即一個引腳除了可以復(fù)用默認(rèn)的外設(shè)功能外,還可以通過設(shè)置重映射寄存器的方式把其他外設(shè)功能映射到該端口上,當(dāng)然原來的引腳上的外設(shè)功能就失效了。 例如PD5\PD6的復(fù)用功能為FSMC_NWE\FSMC_NWAIT,它也可以通過設(shè)置重映射寄存器的方式設(shè)置外設(shè)功能為USART2_TX\USART2_RX。而原來的PA2\PA3則不能再作為USART2_TX\USART2_RX使用了。
四、端口重映射的優(yōu)點 1、I/0的復(fù)用:GPIO和內(nèi)置外設(shè)共用引出管腳 2、I/0的重映射:復(fù)用功能(AFIO)從不同的GPIO管腳引出 3、為了方便PCB的設(shè)計,潛在的減少信號的交叉干擾 4、分時復(fù)用某些外設(shè),虛擬地增加了端口數(shù)目 五、AFIO重映射的操作步驟 1、使能被重映射到的I/O端口時鐘 2、使能被重映射的外設(shè)時鐘 3、使能AFIO功能的時鐘(重要) RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); 4、開啟重映射(根據(jù)第一個參數(shù)來確定是部分重映射還是全部重映射) GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE); 六、AFIO輔助功能時鐘必須開啟的場景(參考《STM32中文參考手冊》P123) 凡是對寄存器AFIO_MAPR、AFIO_EXTICRX、AFIO_EVCR進(jìn)行讀寫操作前都應(yīng)該首先打開AFIO時鐘。 AFIO_MAPR:配置復(fù)用功能重映射 AFIO_EXTICRX:配置外部中斷線映射 AFIO_EVCR:配置EVENTOUT事件輸出 七、部分重映射 & 完全重映射 部分重映射:外設(shè)功能的部分引腳重新映射,還有一部分引腳是原來的默認(rèn)引腳。 完全重映射:外設(shè)功能的所有引腳都重新映射。 例如:
USART3_TX\USART3_RX\USART3_CK這三個功能由PB10\PB11\PB12重映射到PC10\PC11\PC12,其余的USAER3_CTS\USART3_RTS依然保留在PB13\PB14,則稱為部分重映射。 將USART3_TX\USART3_RX\USART3_CK\USAER3_CTS\USART3_RTS由PB10\PB11\PB12\PB13\PB14全部映射到PD8\PD9\PD10\PD11\PD12,則稱為完全重映射
|