0. 準(zhǔn)備
安裝完成驅(qū)動(dòng)并連接好以后,進(jìn)入設(shè)備管理器可以看到它們都已被識(shí)別。
打開(kāi)putty.exe,選擇串口連接,用于查看之后的串口輸出。
1. 編寫(xiě)Cube程序,配置UART0為9600,8n1,上電后向串口輸出“Hello”,在PC上通過(guò)串口軟件觀(guān)察結(jié)果;
安裝完成并打開(kāi)CubeMX軟件,選擇New Project,選擇STM32F103C8Tx并點(diǎn)擊ok。
進(jìn)入工程界面以后我們可以看到右邊有芯片的引腳圖,如下所示。我們點(diǎn)擊PA11和PA12,選擇GPIO_Input(后面按鈕用)。然后在左邊的配置中將UART1模式定為Half-Duplex。
在生成代碼前,進(jìn)入工程配置。填寫(xiě)工程名、保存路徑等,同時(shí)選擇IDE為MDK-ARM V5。
設(shè)置完成后點(diǎn)擊生成代碼。注意如果沒(méi)安裝庫(kù)文件的話(huà)會(huì)提示下載,但通過(guò)軟件的自動(dòng)更新速度無(wú)比的慢,而且經(jīng)常下一半會(huì)掛,所以可以在網(wǎng)絡(luò)上下載后自助導(dǎo)入。
生成代碼后彈出如下對(duì)話(huà)框,選擇open。
進(jìn)入keil5以后可以看到我們的工程文件目錄如左欄所示。注意打開(kāi)前會(huì)彈出Pack installer下載對(duì)應(yīng)的編程工具,選擇stm32f1xx系列即可。下載有點(diǎn)慢,可以自己下載或拷貝他人后導(dǎo)入,路徑為 c:/keil v5/ARM/Pack
然后進(jìn)入main.c對(duì)UART進(jìn)行配置為9600,8n1,代碼如下所示。
void?UART0_Init(UART_HandleTypeDef*?UartHandle){??
UartHandle->Instance?=?USART1;??
UartHandle->Init.BaudRate?=?9600;??
UartHandle->Init.WordLength?=?UART_WORDLENGTH_8B;??
UartHandle->Init.StopBits?=?UART_STOPBITS_1;??
UartHandle->Init.Parity?=?UART_PARITY_NONE;??
UartHandle->Init.HwFlowCtl?=?UART_HWCONTROL_NONE;??
UartHandle->Init.Mode?=?UART_MODE_TX_RX;??
HAL_UART_Init(UartHandle);??
} ?
在main函數(shù)中填上下面兩行代碼-
UART_HandleTypeDef?UartHandle;??
UART0_Init(&UartHandle);??
?
以及輸出hello的代碼
HAL_UART_Transmit(&UartHandle,?(uint8_t*)”hello ”,?7,?500);??
完成代碼后,-準(zhǔn)備編譯。選擇flash-設(shè)置,進(jìn)入U(xiǎn)tilities標(biāo)簽,選擇settings,配置如下:
然后F7編譯完成后將程序燒錄至核心板,按一下板子上的reset開(kāi)關(guān)就可以在putty看到串口輸出了。
2. 通過(guò)面包板在PA11和PA12各連接一個(gè)按鈕開(kāi)關(guān)到地;
3. 編寫(xiě)Cube程序,配置PA11和PA12為內(nèi)部上拉到輸入模式,在main()函數(shù)循環(huán)檢測(cè)PA11按鈕按下,并在按鈕按下時(shí) 在串口輸出“Pressed”;
可以在CubeMX中圖形化地更改引腳設(shè)置,也可以直接在代碼中修改:
void?MX_GPIO_Init(void)??
{??
……??
GPIO_InitStruct.Mode?=?GPIO_MODE_INPUT;??
GPIO_InitStruct.Pull?=?GPIO_PULLUP;??
……??
} ?
在while(1)中添加代碼,循環(huán)檢測(cè)并輸出
……??
if(!HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_11))??
HAL_UART_Transmit(&UartHandle,?(uint8_t*)”P(pán)ressed ”,?9,?500);??
else??
HAL_UART_Transmit(&UartHandle,?(uint8_t*)”Not?pressed ”,?13,?500);??
……??
輸出如圖
4. 編寫(xiě)Cube程序,配置PA12下降沿觸發(fā)中斷,程序中設(shè)置兩個(gè)全局變量,一個(gè)為計(jì)數(shù)器,一個(gè)為標(biāo)識(shí)。當(dāng)中斷觸發(fā) 時(shí),計(jì)數(shù)器加1,并設(shè)置標(biāo)識(shí)。
在主循環(huán)中判斷標(biāo)識(shí),如果標(biāo)識(shí)置位則清除標(biāo)識(shí)并通過(guò)串口輸出計(jì)數(shù)值;
在GPIO的init函數(shù)中為PIN12設(shè)置下降沿中斷,并設(shè)置優(yōu)先級(jí)。
GPIO_InitStruct.Pin?=?GPIO_PIN_12;??
GPIO_InitStruct.Mode?=?GPIO_MODE_INPUT;??
GPIO_InitStruct.Pull?=?GPIO_PULLUP;??
GPIO_InitStruct.Mode?=?GPIO_MODE_IT_FALLING;??
HAL_NVIC_SetPriority(EXTI15_10_IRQn,0,0);??
HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);??
HAL_GPIO_Init(GPIOA,?&GPIO_InitStruct);??
評(píng)論
查看更多