當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] 0. 準(zhǔn)備先用st-link連接stm32核心板與PC,用于燒錄St-linkStm323.3V3.3VGNDGNDSWDIODIOSWCLKDCLK再用USB串口板連接,用于查看串口輸出USBStm32RXTX(A9)TXRX(A10)安裝完成驅(qū)動(dòng)并連接好以后,進(jìn)入設(shè)備管理

0. 準(zhǔn)備

先用st-link連接stm32核心板與PC,用于燒錄

St-link

Stm32

3.3V

3.3V

GND

GND

SWDIO

DIO

SWCLK

DCLK

再用USB串口板連接,用于查看串口輸出

USB

Stm32

RX

TX(A9)

TX

RX(A10)

安裝完成驅(qū)動(dòng)并連接好以后,進(jìn)入設(shè)備管理器可以看到它們都已被識(shí)別。

打開(kāi)putty.exe,選擇串口連接,用于查看之后的串口輸出。



1. 編寫(xiě)Cube程序,配置UART0為9600,8n1,上電后向串口輸出“Hello”,在PC上通過(guò)串口軟件觀察結(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ì)提示下載,但通過(guò)軟件的自動(dòng)更新速度無(wú)比的慢,而且經(jīng)常下一半會(huì)掛,所以可以在網(wǎng)絡(luò)上下載后自助導(dǎo)入。

生成代碼后彈出如下對(duì)話框,選擇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,代碼如下所示。


  1. voidUART0_Init(UART_HandleTypeDef*UartHandle){

  2. UartHandle->Instance=USART1;

  3. UartHandle->Init.BaudRate=9600;

  4. UartHandle->Init.WordLength=UART_WORDLENGTH_8B;

  5. UartHandle->Init.StopBits=UART_STOPBITS_1;

  6. UartHandle->Init.Parity=UART_PARITY_NONE;

  7. UartHandle->Init.HwFlowCtl=UART_HWCONTROL_NONE;

  8. UartHandle->Init.Mode=UART_MODE_TX_RX;

  9. HAL_UART_Init(UartHandle);

  10. }


在main函數(shù)中填上下面兩行代碼-


  1. UART_HandleTypeDefUartHandle;

  2. UART0_Init(&UartHandle);



以及輸出hello的代碼


  1. HAL_UART_Transmit(&UartHandle,(uint8_t*)”hellorn”,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è)置,也可以直接在代碼中修改:


  1. voidMX_GPIO_Init(void)

  2. {

  3. ……

  4. GPIO_InitStruct.Mode=GPIO_MODE_INPUT;

  5. GPIO_InitStruct.Pull=GPIO_PULLUP;

  6. ……

  7. }

在while(1)中添加代碼,循環(huán)檢測(cè)并輸出


  1. ……

  2. if(!HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_11))

  3. HAL_UART_Transmit(&UartHandle,(uint8_t*)”P(pán)ressedrn”,9,500);

  4. else

  5. HAL_UART_Transmit(&UartHandle,(uint8_t*)”Notpressedrn”,13,500);

  6. ……


輸出如圖



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í)。


  1. GPIO_InitStruct.Pin=GPIO_PIN_12;

  2. GPIO_InitStruct.Mode=GPIO_MODE_INPUT;

  3. GPIO_InitStruct.Pull=GPIO_PULLUP;

  4. GPIO_InitStruct.Mode=GPIO_MODE_IT_FALLING;

  5. HAL_NVIC_SetPriority(EXTI15_10_IRQn,0,0);

  6. HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);

  7. HAL_GPIO_Init(GPIOA,&GPIO_InitStruct);


PA12引腳的下降沿觸發(fā)將會(huì)觸發(fā)中斷,進(jìn)入函數(shù)EXTI15_10_IRQHandler,此時(shí)在函數(shù)中調(diào)用HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_12)表示查看PA12的值,如果符合條件,則觸發(fā)HAL_GPIO_EXTI_Callback函數(shù)。代碼如下


  1. voidHAL_GPIO_EXTI_Callback(uint16_tGPIO_Pin){

  2. if(GPIO_Pin==GPIO_PIN_12){

  3. PA12flag=1;

  4. PA12cnt++;

  5. }else{

  6. UNUSED(GPIO_Pin);

  7. }

  8. }


在main函數(shù)的while循環(huán)中添加代碼:


  1. if(PA12flag==1){

  2. PA12flag=0;

  3. size=sprint(str,”Count:%drn”,PA12cnt);

  4. HAL_UART_Transmit(&UartHandle,(uint8_t*)str,size,500);

  5. }




5. 編寫(xiě)Cube程序,開(kāi)啟定時(shí)器為200ms中斷一次,中斷觸發(fā)時(shí)設(shè)置標(biāo)識(shí),主循環(huán)根據(jù)這個(gè)標(biāo)識(shí)來(lái)做串口輸出(取消4 的串口輸出);

使用TIM3定時(shí)器,如果不是CUBEMX生成代碼的話記得添加頭文件引用。

添加init函數(shù):


  1. voidTIM_Init(){

  2. TIM_Handle.Instance=TIM3;

  3. TIM_Handle.Init.Prescaler=8000;

  4. TIM_Handle.Init.CounterMode=TIM_COUNTERMODE_UP;

  5. TIM_Handle.Init.Period=199;

  6. TIM_Handle.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;

  7. HAL_TIM_Base_Init(&TIM_Handle);

  8. sClockSourceConfig.ClockSource=TIM_CLOCKSOURCE_INTERNAL;//設(shè)置時(shí)鐘源為內(nèi)部時(shí)鐘

  9. HAL_TIM_ConfigClockSource(&TIM_Handle,&sClockSourceConfig);

  10. sMasterConfig.MasterOutputTrigger=TIM_TRGO_RESET;//設(shè)置復(fù)位模式,發(fā)生觸發(fā)輸入事件時(shí)計(jì)數(shù)器和預(yù)分頻器能重新初始化

  11. sMasterConfig.MasterSlaveMode=TIM_MASTERSLAVEMODE_DISABLE;

  12. HAL_TIMEx_MasterConfigSynchronization(&TIM_Handle,&sMasterConfig);

  13. HAL_NVIC_SetPriority(TIM3_IRQn,0,0);//設(shè)置優(yōu)先級(jí)

  14. HAL_NVIC_EnableIRQ(TIM3_IRQn);enable中斷向量表處理

  15. }


和之前設(shè)置的中斷一樣需要覆寫(xiě)中斷觸發(fā)函數(shù)TIM3_IRQHandler,而后在其中對(duì)時(shí)鐘進(jìn)行判斷后觸發(fā)HAL_TIM_PeriodElapsedCallback。并在callback中實(shí)現(xiàn)操作。


  1. TIM_HandleTypeDefTIM_Handle;

  2. TIM_ClockConfigTypeDefsClockSourceConfig;

  3. TIM_MasterConfigTypeDefsMasterConfig;

  4. intTIMflag=0,PA12flag=0;

  5. intTIMcnt=0,PA12cnt=0,totalcnt=0;

  6. voidTIM3_IRQHandler(void){

  7. HAL_TIM_IRQHandler(&TIM_Handle);

  8. }

  9. voidHAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef*htim){

  10. TIMflag=1;

  11. TIMcnt++;

  12. }

6. 編寫(xiě)完整的碼表程序,PA12的按鈕表示車(chē)輪轉(zhuǎn)了一圈,通過(guò)計(jì)數(shù)器可以得到里程,通過(guò)定時(shí)器中斷得到的時(shí)間可以計(jì)算出速度;PA11的按鈕切換模式,模式一在串口輸出里程,模式二在串口輸出速度。

在main函數(shù)中實(shí)現(xiàn)碼表程序:

  1. while(1)

  2. {

  3. /*USERCODEENDWHILE*/

  4. /*USERCODEBEGIN3*/

  5. if(TIMflag==1){

  6. TIMflag=0;

  7. if(TIMcnt==5){每五個(gè)周期輸出一次

  8. speed=2*PA12cnt/1;//五個(gè)周期為1秒,車(chē)輪周長(zhǎng)2米

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶(hù)希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱(chēng),數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱(chēng)"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉