當(dāng)前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀] 0. 準(zhǔn)備先用st-link連接stm32核心板與PC,用于燒錄St-linkStm323.3V3.3VGNDGNDSWDIODIOSWCLKDCLK再用USB串口板連接,用于查看串口輸出USBStm32RXTX(A9)TXRX(A10)安裝完成驅(qū)動并連接好以后,進入設(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ū)動并連接好以后,進入設(shè)備管理器可以看到它們都已被識別。

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



1. 編寫Cube程序,配置UART0為9600,8n1,上電后向串口輸出“Hello”,在PC上通過串口軟件觀察結(jié)果;

安裝完成并打開CubeMX軟件,選擇New Project,選擇STM32F103C8Tx并點擊ok。



進入工程界面以后我們可以看到右邊有芯片的引腳圖,如下所示。我們點擊PA11和PA12,選擇GPIO_Input(后面按鈕用)。然后在左邊的配置中將UART1模式定為Half-Duplex。

在生成代碼前,進入工程配置。填寫工程名、保存路徑等,同時選擇IDE為MDK-ARM V5。



設(shè)置完成后點擊生成代碼。注意如果沒安裝庫文件的話會提示下載,但通過軟件的自動更新速度無比的慢,而且經(jīng)常下一半會掛,所以可以在網(wǎng)絡(luò)上下載后自助導(dǎo)入。

生成代碼后彈出如下對話框,選擇open。



進入keil5以后可以看到我們的工程文件目錄如左欄所示。注意打開前會彈出Pack installer下載對應(yīng)的編程工具,選擇stm32f1xx系列即可。下載有點慢,可以自己下載或拷貝他人后導(dǎo)入,路徑為 c:/keil v5/ARM/Pack


然后進入main.c對UART進行配置為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è)置,進入Utilities標(biāo)簽,選擇settings,配置如下:



然后F7編譯完成后將程序燒錄至核心板,按一下板子上的reset開關(guān)就可以在putty看到串口輸出了。



2. 通過面包板在PA11和PA12各連接一個按鈕開關(guān)到地;



3. 編寫Cube程序,配置PA11和PA12為內(nèi)部上拉到輸入模式,在main()函數(shù)循環(huán)檢測PA11按鈕按下,并在按鈕按下時 在串口輸出“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)檢測并輸出


  1. ……

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

  3. HAL_UART_Transmit(&UartHandle,(uint8_t*)”Pressedrn”,9,500);

  4. else

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

  6. ……


輸出如圖



4. 編寫Cube程序,配置PA12下降沿觸發(fā)中斷,程序中設(shè)置兩個全局變量,一個為計數(shù)器,一個為標(biāo)識。當(dāng)中斷觸發(fā) 時,計數(shù)器加1,并設(shè)置標(biāo)識。

在主循環(huán)中判斷標(biāo)識,如果標(biāo)識置位則清除標(biāo)識并通過串口輸出計數(shù)值;

在GPIO的init函數(shù)中為PIN12設(shè)置下降沿中斷,并設(shè)置優(yōu)先級。


  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ā)將會觸發(fā)中斷,進入函數(shù)EXTI15_10_IRQHandler,此時在函數(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. 編寫Cube程序,開啟定時器為200ms中斷一次,中斷觸發(fā)時設(shè)置標(biāo)識,主循環(huán)根據(jù)這個標(biāo)識來做串口輸出(取消4 的串口輸出);

使用TIM3定時器,如果不是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è)置時鐘源為內(nèi)部時鐘

  9. HAL_TIM_ConfigClockSource(&TIM_Handle,&sClockSourceConfig);

  10. sMasterConfig.MasterOutputTrigger=TIM_TRGO_RESET;//設(shè)置復(fù)位模式,發(fā)生觸發(fā)輸入事件時計數(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)先級

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

  15. }


和之前設(shè)置的中斷一樣需要覆寫中斷觸發(fā)函數(shù)TIM3_IRQHandler,而后在其中對時鐘進行判斷后觸發(fā)HAL_TIM_PeriodElapsedCallback。并在callback中實現(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. 編寫完整的碼表程序,PA12的按鈕表示車輪轉(zhuǎn)了一圈,通過計數(shù)器可以得到里程,通過定時器中斷得到的時間可以計算出速度;PA11的按鈕切換模式,模式一在串口輸出里程,模式二在串口輸出速度。

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

  1. while(1)

  2. {

  3. /*USERCODEENDWHILE*/

  4. /*USERCODEBEGIN3*/

  5. if(TIMflag==1){

  6. TIMflag=0;

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

  8. speed=2*PA12cnt/1;//五個周期為1秒,車輪周長2米

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

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

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

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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