日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何用c语言编写stm32的程序吗,STM32入门C语言详解

發布時間:2024/1/1 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何用c语言编写stm32的程序吗,STM32入门C语言详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

《STM32入門C語言詳解》由會員分享,可在線閱讀,更多相關《STM32入門C語言詳解(6頁珍藏版)》請在人人文庫網上搜索。

1、最新 料推薦閱讀 flash : 芯片內部存儲器flash 操作函數我的理解 對芯片內部flash 進行操作的函數,包括讀取,狀態,擦除,寫入等等,可以允許程序去操作flash 上的數據。基礎應用1 ,FLASH 時序延遲幾個周期,等待總線同步操作。推薦按照單片機系統運行頻率,0 24MHz 時,取 Latency=0 ; 24 48MHz 時,取 Latency=1 ;4872MHz時,取 Latency=2 。所有程序中必須的用法: FLASH_SetLatency(FLASH_Latency_2);位置: RCC 初始化子函數里面,時鐘起振之后。基礎應用2 ,開啟 FLASH 預讀緩沖功。

2、能,加速FLASH 的讀取。所有程序中必須的用法: FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);位置: RCC 初始化子函數里面,時鐘起振之后。3 、閱讀 lib :調試所有外設初始化的函數。我的理解 不理解,也不需要理解。只要知道所有外設在調試的時候,EWRAM需要從這個函數里面獲得調試所需信息的地址或者指針之類的信息。基礎應用1 ,只有一個函數debug 。所有程序中必須的。用法:#ifdef DEBUGdebug();#endif位置: main 函數開頭,聲明變量之后。4 、 閱讀 nvic :系統中斷管理。我的理解 管理系。

3、統內部的中斷,負責打開和關閉中斷。基礎應用1 ,中斷的初始化函數,包括設置中斷向量表位置,和開啟所需的中斷兩部分。所有程序中必須的。用法:void NVIC_Configuration(void)NVIC_InitTypeDef NVIC_InitStructure; /中斷管理恢復默認參數#ifdef VECT_TAB_RAM /如果 C/C+ CompilerPreprocessorDefined symbols中的定義了VECT_TAB_RAM(見程序庫更改內容的表格)NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); /則在 RAM 調試#else 。

4、/ 如果沒有定義VECT_TAB_RAMNVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);/則在 Flash 里調試#endif / 結束判斷語句/以下為中斷的開啟過程,不是所有程序必須的。/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);/設置 NVIC 優先級分組,方式。/注:一共16 個優先級,分為搶占式和響應式。兩種優先級所占的數量由此代碼確定,NVIC_PriorityGroup_x 可以是 0、 1、 2 、3 、 4 ,分別代表搶占優先級有 1 、2 、 4 、8、 16 個和響應優先級有 16。

5、 、8、4 、2 、1 個。規定兩種優先級的數量后,所有的中斷級別必須在其中選擇,搶占級別高的會打斷其他中斷優先執行,而響應級別高的會在其他中斷執行完優先執行。/NVIC_InitStructure.NVIC_IRQChannel =中斷通道名 ; /開中斷,中斷名稱見函數庫/NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; /搶占優先級/NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; /響應優先級1最新 料推薦/NVIC_InitStructure.NVIC_IRQChan。

6、nelCmd = ENABLE; /啟動此通道的中斷/NVIC_Init(&NVIC_InitStructure);中斷初始化5 、閱讀 rcc :單片機時鐘管理。我的理解 管理外部、內部和外設的時鐘,設置、打開和關閉這些時鐘。基礎應用1 :時鐘的初始化函數過程用法: void RCC_Configuration(void) /時鐘初始化函數ErrorStatus HSEStartUpStatus; /等待時鐘的穩定RCC_DeInit(); / 時鐘管理重置RCC_HSEConfig(RCC_HSE_ON); /打開外部晶振HSEStartUpStatus = RCC_WaitForHSES。

7、tartUp(); /等待外部晶振就緒if (HSEStartUpStatus = SUCCESS)FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);/flash讀取緩沖,加速FLASH_SetLatency(FLASH_Latency_2); /flash操作的延時RCC_HCLKConfig(RCC_SYSCLK_Div1); /AHB使用系統時鐘RCC_PCLK2Config(RCC_HCLK_Div2); /APB2(高速)為 HCLK的一半RCC_PCLK1Config(RCC_HCLK_Div2); /APB1(低速)為 HC。

8、LK的一半/注:AHB 主要負責外部存儲器時鐘。PB2 負責 AD ,I/O ,高級 TIM ,串口 1 。APB1 負責 DA ,USB ,SPI , I2C ,CAN ,串口 2345 ,普通 TIM 。RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); /PLLCLK = 8MHz * 9 = 72 MHRCC_PLLCmd(ENABLE); / 啟動 PLLwhile (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET) /等待 PLL 啟動RCC_SYSCLKConfig(RCC_SYSCLKS。

9、ource_PLLCLK); /將 PLL 設置為系統時鐘源while (RCC_GetSYSCLKSource() != 0x08) / 等待系統時鐘源的啟動/RCC_AHBPeriphClockCmd(ABP2設備 1 | ABP2 設備 2 |, ENABLE); /啟動 AHP 設備/RCC_APB2PeriphClockCmd(ABP2設備 1 | ABP2設備 2 |, ENABLE);/啟動 ABP2設備/RCC_APB1PeriphClockCmd(ABP2設備 1 | ABP2設備 2 |, ENABLE); /啟動 ABP1設備6 、 閱讀 exti :外部設備中斷函數我的。

10、理解 外部設備通過引腳給出的硬件中斷,也可以產生軟件中斷,19 個上升、 下降或都觸發。EXTI0 EXTI15 連接到管腳, EXTI 線 16連接到 PVD (VDD監視), EXTI 線 17 連接到 RTC (鬧鐘), EXTI 線 18 連接到 USB (喚醒)。基礎應用 1 ,設定外部中斷初始化函數。按需求,不是必須代碼。用法: void EXTI_Configuration(void)EXTI_InitTypeDef EXTI_InitStructure; /外部設備中斷恢復默認參數EXTI_InitStructure.EXTI_Line =通道 1| 通道 2; / 設定所需產。

11、生外部中斷的通道,一共19 個。EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; /產生中斷EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; /上升下降沿都觸發EXTI_InitStructure.EXTI_LineCmd = ENABLE; /啟動中斷的接收2最新 料推薦EXTI_Init(&EXTI_InitStructure); /外部設備中斷啟動7 、 閱讀 dma :通過總線而越過CPU 讀取外設數據我的理解 通過 DMA 應用可以加速單片機外設、存儲器之間的數據傳輸,。

12、并在傳輸期間不影響CPU 進行其他事情。這對于入門開發基本功能來說沒有太大必要,這個內容先行跳過。8 、 閱讀 systic :系統定時器我的理解 可以輸出和利用系統時鐘的計數、狀態。基礎應用1 ,精確計時的延時子函數。推薦使用的代碼。用法:static vu32 TimingDelay; /全局變量聲明void SysTick_Config(void) /systick初始化函數SysTick_CounterCmd(SysTick_Counter_Disable); /停止系統定時器SysTick_ITConfig(DISABLE); /停止 systick 中斷SysTick_CLKSou。

13、rceConfig(SysTick_CLKSource_HCLK_Div8); /systick使用 HCLK 作為時鐘源,頻率值除以 8。SysTick_SetReload(9000); /重置時間 1 毫秒(以 72MHz為基礎計算)SysTick_ITConfig(ENABLE); /開啟 systic 中斷void Delay (u32 nTime) /延遲一毫秒的函數SysTick_CounterCmd(SysTick_Counter_Enable); /systic開始計時TimingDelay = nTime; /計時長度賦值給遞減變量while(TimingDelay != 0。

14、); /檢測是否計時完成SysTick_CounterCmd(SysTick_Counter_Disable); /關閉計數器SysTick_CounterCmd(SysTick_Counter_Clear); /清除計數值void TimingDelay_Decrement(void) /遞減變量函數,函數名由 “ stm32f10x_it.c 中的”中斷響應函數定義好了。if (TimingDelay != 0x00) /檢測計數變量是否達到0 TimingDelay-; / 計數變量遞減注:建議熟練后使用,所涉及知識和設備太多,新手出錯的可能性比較大。新手可用簡化的延時函數代替:void。

15、 Delay(vu32 nCount) /簡單延時函數for(; nCount != 0; nCount-); /循環變量遞減計數當延時較長,又不需要精確計時的時候可以使用嵌套循環:void Delay(vu32 nCount) /簡單的長時間延時函數 int i; / 聲明內部遞減變量3最新 料推薦for(; nCount != 0; nCount-) / 減 量 數 for (i=0; i0xffff; i+) /內部循 減 量 數9 、 閱讀 gpio :I/O 置函數我的理解 所有 入 出管腳模式 置,可以是上下拉、浮空、開漏、模 、推挽模式, 率特性 2M , 10M ,50M 。也。

16、可以向 管腳直接寫入數據和 取數據。基 用1 , gpio 初始化函數。所有程序必 。用法: void GPIO_Configuration(void)GPIO_InitTypeDef GPIO_InitStructure; /GPIO狀 恢復默 參數GPIO_InitStructure.GPIO_Pin = GPIO_Pin_ 號| GPIO_Pin_ 號; /管腳位置定 , 號可以是NONE 、 ALL 、 0 至 15 。GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;/ 出速度2MHzGPIO_InitStructure.GPIO_Mod。

17、e = GPIO_Mode_AIN; /模 入模式GPIO_Init(GPIOC, &GPIO_InitStructure); /C組 GPIO 初始化/注:以上四行代 一 , 每 GPIO 屬性必 相同, 默 的 GPIO 參數 :ALL ,2MHz ,FLATING 。如果其中任意一行與前一 相 置相同,那么那一行可以省略,由此推 如果前面已 將此行參數 定 默 參數(包括使用 GPIO_InitTypeDef GPIO_InitStructure 代 ),本 用也是默 參數的 ,那么也可以省略。以下重復 個 程直到所有 用的管腳全部被定 完 。基 用2 ,向管腳寫入0 或 1用法: GP。

18、IO_WriteBit(GPIOB, GPIO_Pin_2, (BitAction)0x01); /寫入 1基 用3 ,從管腳 入0 或 1用法: GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6)STM32 筆 之七: 它跑起來,基本硬件功能的建立0 、 之前的準 a) 接通串口 接器b) 下 IO 與串口的原廠程序, 通 保 所需硬件正常。1 、 flash ,lib , nvic , rcc 和 GPIO ,基 程序 寫a) 幾個 函數中有一些函數是關于芯片的初始化的,每個程序中必用。 保障程序品 ,初學 段要求 格遵守官方 。注意,官方程序 例程中有個pl。

19、atform_config.h文件,是 用來指定同 外 中第幾號外 被使用,就是 在main.c 里面所有外 序號用x 代替,比如USARTx ,程序會到 個 文件中去 找到底是用那些外 ,初學的 候參考例程 被 個所迷惑住。b) 全部必用代 取自 函數所 例程,并增加逐句注 。c) 序 Lib ( debug ), RCC (包括 Flash 化), NVIC , GPIOd) 必用模 初始化函數的定 :void RCC_Configuration(void); / 定 初始化函數 void GPIO_Configuration(void); / 定 管腳初始化函數 void NVIC_Co。

20、nfiguration(void); / 定 中斷管理初始化函數 void Delay(vu32 nCount); / 定 延 函數e) Main 中的初始化函數 用:RCC_Configuration(); / 初始化函數 用NVIC_Configuration(); /中斷初始化函數 用4最新 料推薦GPIO_Configuration(); /管腳初始化函數 用f) Lib 注意事 :屬于Lib 的 Debug 函數的 用, 放在main 函數最開始,不要改 其位置。g) RCC 注意事 :Flash 化 理可以不做, 但是兩句也不 也不用改參數 根據需要開啟 可以 省 能 率需要根據 。

21、情況 置參數h) NVIC 注意事 注意理解占先 先 和響 先 的分 的概念i) GPIO 注意事 注意以后的 程中收集不同管腳 用 的 率和模式的 置。作 高低 平的 I/O ,所需 置: RCC 初始化里面打開 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA);GPIO里面管腳 定:IO 出( 50MHz , Out_PP );IO 入( 50MHz ,IPU );j) GPIO 用GPIO_WriteBit(GPIOB, GPIO_Pin_2, Bit_RESET);/重置GPIO_WriteBit(GPIOB, GPIO_Pin_2, (BitA。

22、ction)0x01);/寫入 1GPIO_WriteBit(GPIOB, GPIO_Pin_2, (BitAction)0x00);/寫入 0GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6) ;/ 入 IOk) 簡單 Delay 函數void Delay(vu32 nCount)/ 延 函數 for(; nCount != 0; nCount-);步 :RCC 初始化函數里添加:RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 |RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB , 。

23、ENABLE);不用其他中斷,NVIC 初始化函數不用改GPIO 初始化代 :/IO 入, GPIOB 的 2 、 10、 11 腳 出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 ;/管腳號GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; / 出速度GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; / 入 出模式GPIO_Init(GPIOB, &GPIO_InitStructure); /初始化的延 函數:void Delay(vu32 nCount) / 。

24、延 函數 for (; nCount != 0; nCount-); / 循 數延 完成之后再在main.c 的 while 里面寫一段:GPIO_WriteBit(GPIOB, GPIO_Pin_2, (BitAction)0x01);/寫入 1Delay ( 0xffff ) ;GPIO_WriteBit(GPIOB, GPIO_Pin_2, (BitAction)0x00);/寫入 0Delay ( 0xffff ) ;就可以看到 接在PB2 腳上的 LED 了, 片機就跑起來了。STM32 筆 之八:來跟PC 打個招呼,基本串口通 a) 目的:在基 成功的基 上, 串口的 方法 行 踐。

25、。硬件代 利完成之后, 日后 需要用到的 printf 重定 行 ,固定在自己的 函數中。b) 初始化函數定 :5最新 料推薦void USART_Configuration(void); /定義串口初始化函數c) 初始化函數調用:void UART_Configuration(void); /串口初始化函數調用初始化代碼:void USART_Configuration(void) /串口初始化函數/串口參數初始化USART_InitTypeDef USART_InitStructure; /串口設置恢復默認參數/初始化參數設置USART_InitStructure.USART_BaudRa。

26、te = 9600; /波特率 9600USART_InitStructure.USART_WordLength = USART_WordLength_8b; /字長 8 位USART_InitStructure.USART_StopBits = USART_StopBits_1; /1位停止字節USART_InitStructure.USART_Parity = USART_Parity_No; /無奇偶校驗USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;/無流控制USART_Ini。

27、tStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;/打開 Rx 接收和 Tx發送功能USART_Init(USART1, &USART_InitStructure); /初始化USART_Cmd(USART1, ENABLE); /啟動串口RCC 中打開相應串口RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 , ENABLE);GPIO 里面設定相應串口管腳模式/串口 1 的管腳初始化GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; /管腳 9GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /復用推挽輸出GPIO_Init(GPIOA, &GPIO_InitStructure); /TX初始化GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; /管腳 10GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; /浮空輸入GPIO_Init(GPIOA, &GPIO_InitStructure); /RX初始化6。

總結

以上是生活随笔為你收集整理的如何用c语言编写stm32的程序吗,STM32入门C语言详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。