娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

0. 準備

先用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)

安裝完成驅動并連接好以后,進入設備管理器可以看到它們都已被識別。

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



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

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



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

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



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

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



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


然后進入main.c對UART進行配置為9600,8n1,代碼如下所示。


  1. void UART0_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.    

  10.     HAL_UART_Init(UartHandle);  

  11. }  


在main函數中填上下面兩行代碼-


  1.   UART_HandleTypeDef UartHandle;  

  2.   UART0_Init(&UartHandle);  



以及輸出hello的代碼


  1. HAL_UART_Transmit(&UartHandle, (uint8_t*)”hello\r\n”, 7, 500);  


完成代碼后,-準備編譯。選擇flash-設置,進入Utilities標簽,選擇settings,配置如下:



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



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



3. 編寫Cube程序,配置PA11和PA12為內部上拉到輸入模式,在main()函數循環(huán)檢測PA11按鈕按下,并在按鈕按下時 在串口輸出“Pressed”;

可以在CubeMX中圖形化地更改引腳設置,也可以直接在代碼中修改:


  1. void MX_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*)”Pressed\r\n”, 9, 500);  

  4.   else  

  5.    HAL_UART_Transmit(&UartHandle, (uint8_t*)”Not pressed\r\n”, 13, 500);  

  6. ……  


輸出如圖



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

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

在GPIO的init函數中為PIN12設置下降沿中斷,并設置優(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ā)中斷,進入函數EXTI15_10_IRQHandler,此時在函數中調用HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_12)表示查看PA12的值,如果符合條件,則觸發(fā)HAL_GPIO_EXTI_Callback函數。代碼如下


  1. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){  

  2.     if (GPIO_Pin == GPIO_PIN_12){  

  3.         PA12flag = 1;  

  4.         PA12cnt++;  

  5.     }else{  

  6.         UNUSED(GPIO_Pin);  

  7.     }  

  8. }  


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


  1. if(PA12flag == 1){  

  2.   PA12flag = 0;  

  3.   size = sprint(str, ”Count: %d\r\n”,PA12cnt);  

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

  5. }  




5. 編寫Cube程序,開啟定時器為200ms中斷一次,中斷觸發(fā)時設置標識,主循環(huán)根據這個標識來做串口輸出(取消4 的串口輸出);

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

添加init函數:


  1. void TIM_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.         

  8.        HAL_TIM_Base_Init(&TIM_Handle);  

  9.          

  10.        sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; //設置時鐘源為內部時鐘  

  11.        HAL_TIM_ConfigClockSource(&TIM_Handle, &sClockSourceConfig);  

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

  13.        sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;  

  14.        HAL_TIMEx_MasterConfigSynchronization(&TIM_Handle, &sMasterConfig);  

  15.         

  16.        HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0);//設置優(yōu)先級  

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

  18. }  


和之前設置的中斷一樣需要覆寫中斷觸發(fā)函數TIM3_IRQHandler,而后在其中對時鐘進行判斷后觸發(fā)HAL_TIM_PeriodElapsedCallback。并在callback中實現操作。


  1. TIM_HandleTypeDef TIM_Handle;  

  2. TIM_ClockConfigTypeDef sClockSourceConfig;  

  3. TIM_MasterConfigTypeDef sMasterConfig;     

  4.                

  5. int TIMflag = 0, PA12flag = 0;  

  6. int TIMcnt = 0, PA12cnt = 0, totalcnt = 0;  

  7.    

  8. void TIM3_IRQHandler(void){  

  9.     HAL_TIM_IRQHandler(&TIM_Handle);  

  10. }  

  11.    

  12. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){     

  13.     TIMflag = 1;  

  14.               TIMcnt++;  

  15. }  

6. 編寫完整的碼表程序,PA12的按鈕表示車輪轉了一圈,通過計數器可以得到里程,通過定時器中斷得到的時間可以計算出速度;PA11的按鈕切換模式,模式一在串口輸出里程,模式二在串口輸出速度。

在main函數中實現碼表程序:

  1. while (1)  

  2.   {  

  3.   /* USER CODE END WHILE */  

  4.   /* USER CODE BEGIN 3 */  

  5.               if(TIMflag == 1){  

  6.                             TIMflag = 0;  

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

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

  9.                      TIMcnt = 0;  

  10.    

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

  12.                      mode = 1 - mode;//PA11按鈕負責模式切換  

  13.               switch(mode){  

  14.                      case 0:  

  15.                             size = sprintf(str, "Speed : %f \r\n",speed);//輸出速度  

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

  17.                             break;  

  18.                      case 1:  

  19.                             size = sprintf(str, "Mileage: %d \r\n", 2 * totalcnt);//輸出里程  

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

  21.                             break;  

  22.                      default:break;  

  23.                      }  

  24.                      PA12cnt = 0;  

  25.               } }  


關鍵字:stm32CubeMX  keil5  stm32f103 引用地址:基于stm32CubeMX和keil5的stm32f103學習編程

上一篇:STM32高級開發(fā)(14)-使用CubeMX生成STM32工程
下一篇:使用STM32CubeMX開發(fā)一:跑馬燈實驗

推薦閱讀

不知大家是否注意到,但凡我們提及發(fā)動機的先進技術,總離不開“可變”這個話題。為什么?很簡單,發(fā)動機在不同工況下的效率差異實在是太大了。如果沒有“可變”技術,發(fā)動機在標定時就只能“遷就”某一類工況,而使另一類工況劣化;亦或者采取折中的辦法,最后的結果就是兩類工況都難以達到最優(yōu)。我們熟悉的“可變”有很多,例如可變氣門正時、可變進氣歧...
  NEC公司宣布,其旗下全資子公司NEC能源解決方案公司通過中國獨家經銷商和合作伙伴普星聚能股份公司(簡稱“普星聚能”),為北京睿能世紀科技有限公司(簡稱“睿能世紀”),提供三套電網儲能系統(tǒng)計24MW,提升了NEC電網儲能系統(tǒng)產品和解決方案服務中國火電聯合調頻應用市場滲透率。睿能世紀已投入運營的儲能系統(tǒng)分別位于內蒙古自治區(qū)鄂爾多斯杭錦電廠(9M...
在MPLAB X IDE軟件中新建工程。按照慣例,通常會把頭文件放在名為 h 的文件夾下,源文件放在 src 文件夾下,如下圖所示。這里編譯時會報標題所示錯誤。環(huán)境MPLAB X IDE版本:v5.10編譯器:xc16-gcc v1.20解決方法1、打開菜單 文件項目屬性,彈出項目屬性對話框。點擊 XC16,編輯 Common include dirs。2、添加 ..和.目錄。 這兩種路徑分別...
“我相信,在今后幾年間,中國不僅將會是傳統(tǒng)ADAS市場,更將是自動駕駛領域的領頭羊。在一些新概念的技術中,包括在物流、運輸領域,我認為中國都將是顛覆者和弄潮兒”。4月19日上海車展開幕當日,大陸集團ADAS事業(yè)部全球負責人Frank Petznick在接受蓋世汽車采訪時如是說。大陸集團ADAS事業(yè)部全球負責人Frank Petznick(圖片來源:大陸集團)時值2021年...

史海拾趣

問答坊 | AI 解惑

C語言嵌入式系統(tǒng)編程—軟件架構篇

模塊劃分   模塊劃分的"劃"是規(guī)劃的意思,意指怎樣合理的將一個很大的軟件劃分為一系列功能獨立的部分合作完成系統(tǒng)的需求。C語言作為一種結構化的程序設計語言,在模塊的劃分上主要依據功能(依功能進行劃分在面向對象設計中成為一個錯誤 ...…

查看全部問答∨

Bootloader(U-BOOT)詳解!

有助于在S3C2410上移植U-BOOT~~!…

查看全部問答∨

跪求mcs-51系列單片機設計的簡單系統(tǒng)

RT........ 還請單片機達人幫忙解決,小弟在此謝過…

查看全部問答∨

喬布斯畫傳:漫長而輝煌的CEO生涯

蘋果iPad發(fā)售在即,史蒂夫·喬布斯能否延續(xù)iPhone的輝煌引人關注。這是喬布斯自接受肝移植手術以來在商業(yè)舞臺上的最大動作值此時機,推出《史蒂夫·喬布斯漫長而輝煌的職業(yè)生涯》。 電腦天才 1976年,史蒂夫·喬布斯與拍檔合作創(chuàng)建了蘋果公司。他 ...…

查看全部問答∨

BENQ M23 GPRS調試時出現的問題,大蝦救救

我的操作如下: AT+CFUN=1 AT+COPS=0 AT+IPR=0 AT+IFC=0,0 AT+CGDCONT=1,\"IP\",\"CMNET\" AT+CGCLASS=\"B\" AT+CGATT=1 AT+CGACT=1 AT$SIMAUTH=\"11111111111111111111111111abcdef\" AT+CMEE=2 AT+CGREG=2 AT+CGACT=1,1 AT+CGPADDR= ...…

查看全部問答∨

tps65180

       Eink屏不同于普通的LCD屏,它需要+22V,-20V,+15V,-15V,+3.3V,-1.25V 等不同級別的電壓,而且EInk屏是一種非常省電的屏幕,它只有在刷新(翻頁)時需要開通電源,刷新完后電源就關閉了,所以需要專門有一塊 ...…

查看全部問答∨

關于2.0庫的問題

開始只用定時器4,一切正常運行。 后來用定時器2和3級聯,發(fā)現先配置定時器4,后配置定時器2和3,結果定時器4,不工作。 后來找問題:先配置定時器2和3,然后再配置定時器4,結果又正常了。 以前很早我還發(fā)現一個問題 我用定 ...…

查看全部問答∨

關于STM8S103的AWU和ADC的問題

關于STM8S103的AWU和ADC的問題   昨天我試該單片機的awu功能,mcu睡眠醒來后,發(fā)現系統(tǒng)死機,后來經過一步步測試發(fā)現系統(tǒng)在檢測ADC時系統(tǒng)死機。于是我在睡眠醒來后初始話ADC及pwm后,系統(tǒng)是沒有死機,但是這樣的話,我的ADC觸摸按 ...…

查看全部問答∨

12864 液晶 按鍵輸入數值 單步可以 運行就不行

我做的是采集電壓  12864顯示     鍵盤  鍵入并顯示報警值 是4x4鍵盤       鍵盤掃描程序uchar key_in() {     uchar keytemp,scancode,tmpcode;     &nbs ...…

查看全部問答∨

請問:MSP430F5529如何用外部晶振產生一個10KHz的方波?謝謝!

如題 外部晶振4MHz,不適用32KHz的晶振,不準確。謝謝…

查看全部問答∨
小廣播
設計資源 培訓 開發(fā)板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統(tǒng)推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 台南县| 临西县| 武平县| 莱西市| 酉阳| 永宁县| 酒泉市| 深水埗区| 泸西县| 韩城市| 吴桥县| 扬中市| 上高县| 聊城市| 左贡县| 潼关县| 钦州市| 普兰县| 渭南市| 内乡县| 福安市| 静海县| 深泽县| 搜索| 阳曲县| 丰县| 密山市| 呼伦贝尔市| 和田市| 新源县| 金昌市| 县级市| 岳池县| 泌阳县| 福鼎市| 定结县| 澜沧| 天柱县| 陆河县| 湖州市| 石景山区|