內容簡介
本書以引導讀者快速全麵掌握STM32F103x係列嵌入式微控製器為目的,由淺入深地帶領讀者走進嵌入式世界。本書共分為兩部分:第一部分以嵌入式基本概念為平颱,介紹嵌入式微控製器各模塊的使用方法、庫函數,從簡單的單模塊知識到復雜的多模塊應用,涵蓋Cortex-M3體係結構、開發平颱、復位和時鍾控製器、NVIC和EXTI模塊、GPIO模塊、FSMC模塊、模數轉換器模塊、通用定時器模塊、通信模塊等常用功能模塊。第二部分主要介紹μC/OS-Ⅱ操作係統的概念與應用,講解μC/OS-Ⅱ操作係統的內核、常用的係統服務等知識。本書注重理論知識和實踐能力的結閤,推薦初學者使用庫函數設計嵌入式程序以避免復雜的寄存器操作。
作者簡介
桂珺,男,瀋陽工業大學教師,全國高等學校電子信息類專業教學指導委員會,協作委員。曾獲得2009年全國大學生電子設計競賽遼寜省優秀指導教師。
目錄
目 錄
第1章 嵌入式係統概述 (1)
1.1 嵌入式係統簡介 (1)
1.1.1 嵌入式係統定義 (1)
1.1.2 嵌入式係統的特點 (2)
1.1.3 嵌入式係統的應用領域 (3)
1.2 嵌入式係統的組成 (4)
1.3 嵌入式處理器 (5)
1.3.1 嵌入式處理器的分類 (5)
1.3.2 嵌入式處理器的選型原則 (6)
1.4 嵌入式操作係統 (7)
1.5 ARM處理器簡介 (10)
1.5.1 ARM處理器的進化過程 (10)
1.5.2 ARM處理器的開發工具 (12)
1.6 嵌入式係統的設計方法 (13)
1.6.1 嵌入式係統的總體結構 (13)
1.6.2 嵌入式係統設計過程 (14)
1.6.3 嵌入式係統的硬/軟件協同設計技術 (15)
思考與練習 (16)
第2章 ARM Cortex-M3內部結構 (17)
2.1 Cortex-M3簡介 (17)
2.2 指令集 (20)
2.3 流水綫 (21)
2.4 寄存器組 (22)
2.5 操作模式和特權等級 (25)
2.6 異常、中斷和嚮量錶 (26)
2.7 存儲器映射 (29)
2.8 調試支持 (30)
思考與練習 (30)
第3章 STM32F1係列微控製器簡介 (31)
3.1 基於Cortex-M3內核的STM32F1微控製器概述 (31)
3.2 STM32F1微控製器的係統結構 (33)
3.3 STM32F1微控製器的存儲器結構與映射 (34)
3.4 STM32F1微控製器的嵌入式閃存 (36)
3.5 STM32F1微控製器的啓動配置 (37)
3.6 STM32F1微控製器的電源控製 (38)
3.7 STM32F1微控製器的復位 (39)
3.8 STM32F1微控製器的調試端口 (41)
思考與練習 (41)
第4章 建立MDK-ARM5.0開發平颱 (42)
4.1 MDK-ARM簡介 (42)
4.2 CMSIS標準簡介 (44)
4.3 STM32標準外設庫 (45)
4.4 安裝MDK-ARM5.0 (49)
4.5 創建工程模闆 (52)
思考與練習 (57)
第5章 復位與時鍾控製器 (58)
5.1 STM32F103x微控製器時鍾模塊簡介 (58)
5.1.1 HSE時鍾 (60)
5.1.2 HSI時鍾 (60)
5.1.3 PLL (61)
5.1.4 LSE時鍾 (61)
5.1.5 LSI時鍾 (61)
5.1.6 係統時鍾的選擇 (62)
5.1.7 時鍾安全係統 (62)
5.1.8 RTC時鍾 (62)
5.1.9 看門狗時鍾 (62)
5.1.10 時鍾輸齣 (62)
5.1.11 片上外設時鍾 (63)
5.2 RCC庫函數說明 (63)
5.2.1 庫函數RCC_DeInit (65)
5.2.2 庫函數RCC_HSEConfig (65)
5.2.3 庫函數RCC_WaitForHSEStartUp (65)
5.2.4 庫函數RCC_AdjustHSICalibrationValue (66)
5.2.5 庫函數RCC_HSICmd (66)
5.2.6 庫函數RCC_PLLConfig (66)
5.2.7 庫函數RCC_PLLCmd (67)
5.2.8 庫函數RCC_SYSCLKConfig (67)
5.2.9 庫函數RCC_GetSYSCLKSource (68)
5.2.10 庫函數RCC_HCLKConfig (68)
5.2.11 庫函數RCC_PCLK1Config (69)
5.2.12 庫函數RCC_PCLK2Config (69)
5.2.13 庫函數RCC_ITConfig (70)
5.2.14 庫函數RCC_USBCLKConfig (70)
5.2.15 庫函數RCC_ADCCLKConfig (70)
5.2.16 庫函數RCC_LSEConfig (71)
5.2.17 庫函數RCC_LSICmd (71)
5.2.18 庫函數RCC_RTCCLKConfig (72)
5.2.19 庫函數RCC_RTCCLKCmd (72)
5.2.20 庫函數RCC_GetClocksFreq (72)
5.2.21 庫函數RCC_AHBPeriphClockCmd (73)
5.2.22 庫函數RCC_APB2PeriphClockCmd (73)
5.2.23 庫函數RCC_APB1PeriphClockCmd (74)
5.2.24 庫函數RCC_APB2PeriphResetCmd (75)
5.2.25 庫函數RCC_APB1PeriphResetCmd (75)
5.2.26 庫函數RCC_BackupResetCmd (75)
5.2.27 庫函數RCC_ClockSecuritySystemCmd (76)
5.2.28 庫函數RCC_MCOConfig (76)
5.2.29 庫函數RCC_GetFlagStatus (76)
5.2.30 庫函數RCC_ClearFlag (77)
5.2.31 庫函數RCC_GetITStatus (77)
5.2.32 庫函數RCC_ClearITPendingBit (78)
5.3 使用RCC庫函數建立係統時鍾 (78)
5.3.1 建立係統時鍾的一般流程 (78)
5.3.2 實例 (79)
思考與練習 (79)
第6章 I/O端口模塊 (81)
6.1 概述 (81)
6.2 GPIO庫函數說明 (83)
6.2.1 庫函數GPIO_DeInit (84)
6.2.2 庫函數GPIO_AFIODeInit (84)
6.2.3 庫函數GPIO_Init (84)
6.2.4 庫函數GPIO_StructInit (86)
6.2.5 庫函數GPIO_ReadInputDataBit (86)
6.2.6 庫函數GPIO_ReadInputData (87)
6.2.7 庫函數GPIO_ReadOutputDataBit (87)
6.2.8 庫函數GPIO_ReadOutputData (87)
6.2.9 庫函數GPIO_SetBits (88)
6.2.10 庫函數GPIO_ResetBits (88)
6.2.11 庫函數GPIO_WriteBit (88)
6.2.12 庫函數GPIO_Write (88)
6.2.13 庫函數GPIO_PinLockConfig (89)
6.2.14 庫函數GPIO_EventOutputConfig (89)
6.2.15 庫函數GPIO_EventOutputCmd (90)
6.2.16 庫函數GPIO_PinRemapConfig (90)
6.2.17 庫函數GPIO_EXTILineConfig (91)
思考與練習 (91)
第7章 中斷和事件 (92)
7.1 嵌套嚮量中斷控製器 (92)
7.2 外部中斷/事件控製器 (95)
7.3 NVIC庫函數說明 (96)
7.3.1 庫函數NVIC_PriorityGroupConfig (97)
7.3.2 庫函數NVIC_Init (97)
7.3.3 庫函數NVIC_SetVectorTable (99)
7.3.4 庫函數NVIC_SystemLPConfig (100)
7.4 EXTI庫函數說明 (100)
7.4.1 庫函數EXTI_DeInit (101)
7.4.2 庫函數EXTI_Init (101)
7.4.3 庫函數EXTI_StructInit (102)
7.4.4 庫函數EXTI_GenerateSWInterrupt (103)
7.4.5 庫函數EXTI_GetFlagStatus (103)
7.4.6 庫函數EXTI_ClearFlag (103)
7.4.7 庫函數EXTI_GetITStatus (103)
7.4.8 庫函數EXTI_ClearITPendingBit (104)
思考與練習 (104)
第8章 係統時基定時器 (105)
8.1 概述 (105)
8.2 SysTick庫函數說明 (106)
思考與練習 (106)
第9章 實時時鍾和備份寄存器 (107)
9.1 實時時鍾簡介 (107)
9.2 後備寄存器簡介 (111)
9.3 RTC庫函數說明 (112)
9.3.1 庫函數RTC_ITConfig (112)
9.3.2 庫函數RTC_EnterConfigMode (113)
9.3.3 庫函數RTC_ExitConfigMode (113)
9.3.4 庫函數RTC_GetCounter (113)
9.3.5 庫函數RTC_SetCounter (113)
9.3.6 庫函數RTC_SetPrescaler (114)
9.3.7 庫函數RTC_SetAlarm (114)
9.3.8 庫函數RTC_WaitForLastTask (114)
9.3.9 庫函數RTC_WaitForSynchro (114)
9.3.10 庫函數RTC_GetFlagStatus (115)
9.3.11 庫函數RTC_ClearFlag (115)
9.3.12 庫函數RTC_GetITStatus (115)
9.3.13 庫函數RTC_ClearITPendingBit (116)
9.4 BKP庫函數說明 (116)
9.4.1 庫函數BKP_DeInit (116)
9.4.2 庫函數BKP_Init (117)
9.4.3 庫函數BKP_TamperPinCmd (117)
9.4.4 庫函數BKP_ITConfig (117)
9.4.5 庫函數BKP_RTCOutputConfig (117)
9.4.6 庫函數BKP_SetRTCCalibrationValue (118)
9.4.7 庫函數BKP_WriteBackupRegister (118)
9.4.8 庫函數BKP_ReadBackupRegister (119)
9.4.9 庫函數BKP_GetFlagStatus (119)
9.4.10 庫函數BKP_ClearFlag (119)
9.4.11 庫函數BKP_GetITStatus (119)
9.4.12 庫函數BKP_ClearITPendingBit (120)
思考與練習 (120)
第10章 嵌入式閃存 (121)
10.1 嵌入式閃存簡介 (121)
10.1.1 嵌入式閃存的組織方式 (121)
10.1.2 嵌入式閃存的讀操作 (122)
10.1.3 嵌入式編程和擦除控製器 (123)
10.2 FLASH庫函數說明 (128)
10.2.1 庫函數FLASH_SetLatency (129)
10.2.2 庫函數FLASH_HalfCycleAccessCmd (129)
10.2.3 庫函數FLASH_PrefetchBufferCmd (130)
10.2.4 庫函數FLASH_Unlock (130)
10.2.5 庫函數FLASH_Lock (130)
10.2.6 庫函數FLASH_ErasePage (130)
10.2.7 庫函數FLASH_EraseAllPages (131)
10.2.8 庫函數FLASH_EraseOptionBytes (131)
10.2.9 庫函數FLASH_ProgramWord (131)
10.2.10 庫函數FLASH_ProgramHalfWord (131)
10.2.11 庫函數FLASH_ProgramOptionByteData (132)
10.2.12 庫函數FLASH_EnableWriteProtection (132)
10.2.13 庫函數FLASH_ReadOutProtection (133)
10.2.14 庫函數FLASH_UserOptionByteConfig (133)
10.2.15 庫函數FLASH_GetUserOptionByte (133)
10.2.16 庫函數FLASH_GetWriteProtectionOptionByte (134)
10.2.17 庫函數FLASH_GetReadOutProtectionStatus (134)
10.2.18 庫函數FLASH_GetPrefetchBufferStatus (134)
10.2.19 庫函數FLASH_ITConfig (134)
10.2.20 庫函數FLASH_GetFlagStatus (135)
10.2.21 庫函數FLASH_ClearFlag (135)
10.2.22 庫函數FLASH_GetStatus (135)
10.2.23 庫函數FLASH_WaitForLastOperation (136)
思考與練習 (136)
第11章 USART串口模塊 (137)
11.1 USART串口簡介 (137)
11.1.1 功能概述 (138)
11.1.2 發送器 (139)
11.1.3 接收器 (140)
11.1.4 産生分數比特率 (141)
11.1.5 多處理器通信 (142)
11.1.6 LIN模式 (143)
11.1.7 USART同步模式 (143)
11.1.8 單綫半雙工 (144)
11.1.9 智能卡模式 (145)
11.1.10 紅外模式 (146)
11.1.11 USART的中斷請求 (147)
11.2 USART庫函數說明 (148)
11.2.1 庫函數USART_DeInit (149)
11.2.2 庫函數USART_Init (149)
11.2.3 庫函數USART_StructInit (151)
11.2.4 庫函數USART_Cmd (151)
11.2.5 庫函數USART_ITConfig (151)
11.2.6 庫函數USART_DMACmd (152)
11.2.7 庫函數USART_SetAddress (152)
11.2.8 庫函數USART_WakeUpConfig (152)
11.2.9 庫函數USART_ReceiverWakeUpCmd (153)
11.2.10 庫函數USART_LINBreakDetectiLengthConfig (153)
11.2.11 庫函數USART_LINCmd (153)
11.2.12 庫函數USART_SendData (154)
11.2.13 庫函數USART_ReceiveData (154)
11.2.14 庫函數USART_SendBreak (154)
11.2.15 庫函數USART_SetGuardTime (154)
11.2.16 庫函數USART_SetPrescaler (155)
11.2.17 庫函數USART_SmartCardCmd (155)
11.2.18 庫函數USART_SmartCardNackCmd (155)
11.2.19 庫函數USART_HalfDuplexCmd (155)
11.2.20 庫函數USART_IrDAConfig (156)
11.2.21 庫函數USART_IrDACmd (156)
11.2.22 庫函數USART_GetFlagStatus (156)
11.2.23 庫函數USART_ClearFlag (157)
11.2.24 庫函數USART_GetITStatus (157)
11.2.25 庫函數USART_ClearITPendingBit (158)
思考與練習 (158)
第12章 SPI模塊 (159)
12.1 SPI簡介 (159)
12.1.1 引腳概述 (160)
12.1.2 數據傳輸模式 (161)
12.1.3 SPI從模式 (162)
12.1.4 SPI主模式 (163)
12.1.5 狀態標誌 (163)
12.1.6 利用DMA的SPI通信 (164)
12.1.7 SPI中斷 (164)
12.2 SPI庫函數說明 (164)
12.2.1 庫函數SPI_DeInit (165)
12.2.2 庫函數SPI_Init (165)
12.2.3 庫函數SPI_StructInit (167)
12.2.4 庫函數SPI_Cmd (167)
12.2.5 庫函數SPI_I2S_ITConfig (168)
12.2.6 庫函數SPI_I2S_DMACmd (168)
12.2.7 庫函數SPI_I2S_SendData (168)
12.2.8 庫函數SPI_I2S_ReceiveData (169)
12.2.9 庫函數SPI_NSSInternalSoftwareConfig (169)
12.2.10 庫函數SPI_SSOutputCmd (169)
12.2.11 庫函數SPI_DataSizeConfig (170)
12.2.12 庫函數SPI_TransmitCRC (170)
12.2.13 庫函數SPI_CalculateCRC (170)
12.2.14 庫函數SPI_GetCRC (170)
12.2.15 庫函數SPI_GetCRCPolynomial (171)
12.2.16 庫函數SPI_BiDirectionalLineConfig (171)
12.2.17 庫函數SPI_I2S_GetFlagStatus (171)
12.2.18 庫函數SPI_I2S_ClearFlag (172)
12.2.19 庫函數SPI_I2S_GetITStatus (172)
12.2.20 庫函數SPI_I2S_ClearITPendingBit (172)
思考與練習 (173)
第13章 I2C模塊 (174)
13.1 I2C簡介 (174)
13.1.1 功能描述 (175)
13.1.2 I2C從模式 (176)
13.1.3 I2C主模式 (177)
13.1.4 錯誤條件 (179)
13.1.5 SDA/SCL綫控製 (180)
13.1.6 DMA請求 (180)
13.1.7 I2C的中斷 (181)
13.2 I2C庫函數說明 (182)
13.2.1 庫函數I2C_DeInit (183)
13.2.2 庫函數I2C_Init (183)
13.2.3 庫函數I2C_StructInit (184)
13.2.4 庫函數I2C_Cmd (185)
13.2.5 庫函數I2C_ITConfig (185)
13.2.6 庫函數I2C_DMACmd (186)
13.2.7 庫函數I2C_SendData (186)
13.2.8 庫函數I2C_ReceiveData (186)
13.2.9 庫函數I2C_DMALastTransferCmd (186)
13.2.10 庫函數I2C_GenerateSTART (187)
13.2.11 庫函數I2C_GenerateSTOP (187)
13.2.12 庫函數I2C_AcknowledgeConfig (187)
13.2.13 庫函數I2C_OwnAddress2Config (187)
13.2.14 庫函數I2C_DualAddressCmd (188)
13.2.15 庫函數I2C_GeneralCallCmd (188)
13.2.16 庫函數I2C_Send7bitAddress (188)
13.2.17 庫函數I2C_ReadRegister (189)
13.2.18 庫函數I2C_SoftwareResetCmd (189)
13.2.19 庫函數I2C_SMBusAlertConfig (189)
13.2.20 庫函數I2C_TransmitPEC (190)
13.2.21 庫函數I2C_PECPositionConfig (190)
13.2.22 庫函數I2C_CalculatePEC (190)
13.2.23 庫函數I2C_GetPEC (190)
13.2.24 庫函數I2C_ARPCmd (191)
13.2.25 庫函數I2C_StretchClockCmd (191)
13.2.26 庫函數I2C_FastModeDutyCycleConfig (191)
13.2.27 庫函數I2C_GetLastEvent (191)
13.2.28 庫函數I2C_CheckEvent (192)
13.2.29 庫函數I2C_GetFlagStatus (192)
13.2.30 庫函數I2C_ClearFlag (193)
13.2.31 庫函數I2C_GetITStatus (193)
13.2.32 庫函數I2C_ClearITPendingBit (194)
思考與練習 (194)
第14章 DMA控製器 (195)
14.1 DMA簡介 (195)
14.2 DMA庫函數說明 (199)
14.2.1 庫函數DMA_DeInit (200)
14.2.2 庫函數DMA_Init (200)
14.2.3 庫函數DMA_StructInit (201)
14.2.4 庫函數DMA_Cmd (202)
14.2.5 庫函數DMA_ITConfig (202)
14.2.6 庫函數DMA_GetCurrDataCounte (203)
14.2.7 庫函數DMA_GetFlagStatus (203)
14.2.8 庫函數DMA_ClearFlag (203)
14.2.9 庫函數DMA_GetITStatus (203)
14.2.10 庫函數DMA_ClearITPendingBit (204)
思考與練習 (204)
第15章 FSMC模塊 (205)
15.1 FSMC簡介 (205)
15.2 與非總綫復用模式的異步16位NOR閃存接口 (207)
15.2.1 FSMC的配置 (207)
15.2.2 時序計算 (209)
15.2.3 硬件連接 (210)
15.2.4 從外部NOR閃存存儲器執行代碼 (211)
15.3 與非總綫復用的16位SRAM接口 (211)
15.3.1 FSMC配置 (211)
15.3.2 時序計算 (212)
15.3.3 硬件連接 (213)
15.4 與8位的NAND閃存存儲器接口 (213)
15.4.1 FSMC配置 (213)
15.4.2 時序計算 (215)
15.4.3 硬件連接 (217)
15.4.4 錯誤校驗碼計算 (217)
15.5 FSMC庫函數說明 (218)
思考與練習 (219)
第16章 模數轉換器模塊 (220)
16.1 ADC簡介 (220)
16.1.1 功能描述 (221)
16.1.2 自校準 (223)
16.1.3 可編程的采樣時間 (224)
16.1.4 外部觸發轉換 (224)
16.1.5 雙ADC模式 (225)
16.1.6 溫度傳感器 (226)
16.1.7 ADC的中斷事件 (227)
16.2 ADC庫函數說明 (227)
16.2.1 庫函數ADC_DeInit (228)
16.2.2 庫函數ADC_Init (228)
16.2.3 庫函數ADC_StructInit (230)
16.2.4 庫函數ADC_Cmd (231)
16.2.5 庫函數ADC_ITConfig (231)
16.2.6 庫函數ADC_DMACmd (231)
16.2.7 庫函數ADC_ResetCalibration (232)
16.2.8 庫函數ADC_GetResetCalibrationStatus (232)
16.2.9 庫函數ADC_StartCalibration (232)
16.2.10 庫函數ADC_GetCalibrationStatus (233)
16.2.11 庫函數ADC_SoftwareStartConvCmd (233)
16.2.12 庫函數ADC_GetSoftwareStartConvStatus (233)
16.2.13 庫函數ADC_DiscModeChannelCountConfig (233)
16.2.14 庫函數ADC_DiscModeCmd (234)
16.2.15 庫函數ADC_RegularChannelConfig (234)
16.2.16 庫函數ADC_ExternalTrigConvConfig (235)
16.2.17 庫函數ADC_GetConversionValue (235)
16.2.18 庫函數ADC_GetDuelModeConversionValue (235)
16.2.19 庫函數ADC_AutoInjectedConvCmd (236)
16.2.20 庫函數ADC_InjectedDiscModeCmd (236)
16.2.21 庫函數ADC_ExternalTrigInjectedConvConfig (236)
16.2.22 庫函數ADC_ExternalTrigInjectedConvCmd (237)
16.2.23 庫函數ADC_SoftwareStartinjectedConvCmd (237)
16.2.24 庫函數ADC_GetsoftwareStartinjectedConvStatus (237)
16.2.25 庫函數ADC_InjectedChannleConfig (238)
16.2.26 庫函數ADC_InjectedSequencerLengthConfig (238)
16.2.27 庫函數ADC_SetInjectedOffset (238)
16.2.28 庫函數ADC_GetInjectedConversionValue (239)
16.2.29 庫函數ADC_AnalogWatchdogCmd (239)
16.2.30 庫函數ADC_AnalogWatchdongThresholdsConfig (239)
16.2.31 庫函數ADC_AnalogWatchdongSingleChannelConfig (240)
16.2.32 庫函數ADC_TampSensorVrefintCmd (240)
16.2.33 庫函數ADC_GetFlagStatus (240)
16.2.34 庫函數ADC_ClearFlag (241)
16.2.35 庫函數ADC_GetITStatus (241)
16.2.36 庫函數ADC_ClearITPendingBit (241)
思考與練習 (241)
第17章 定時器模塊 (243)
17.1 TIM簡介 (243)
17.1.1 計數功能 (244)
17.1.2 時鍾選擇 (248)
17.1.3 捕獲/比較通道 (250)
17.1.4 定時器同步 (261)
17.2 TIM庫函數說明 (265)
17.2.1 庫函數TIM_DeInit (268)
17.2.2 庫函數TIM_TimeBaseInit (268)
17.2.3 庫函數TIM_OC1Init (269)
17.2.4 庫函數TIM_ICInit (270)
17.2.5 庫函數TIM_BDTRConfig (271)
17.2.6 庫函數TIM_TimeBaseStructInit (272)
17.2.7 庫函數TIM_OCStructInit (273)
17.2.8 庫函數TIM_ICStructInit (273)
17.2.9 庫函數TIM_BDTRStructInit (274)
17.2.10 庫函數TIM_Cmd (274)
17.2.11 庫函數TIM_ITConfig (274)
17.2.12 庫函數TIM_GenerateEvent (275)
17.2.13 庫函數TIM_DMAConfig (275)
17.2.14 庫函數TIM_DMACmd (276)
17.2.15 庫函數TIM_InternalClockConfig (277)
17.2.16 庫函數TIM_ITRxExternalClockConfig (277)
17.2.17 庫函數TIM_TIxExternalClockConfig (278)
17.2.18 庫函數TIM_ETRClockMode1Config (278)
17.2.19 庫函數TIM_ETRClockMode2Config (279)
17.2.20 庫函數TIM_ETRConfig (279)
17.2.21 庫函數TIM_SelectInputTrigger (279)
17.2.22 庫函數TIM_PrescalerConfig (280)
17.2.23 庫函數TIM_CounterModeConfig (280)
17.2.24 庫函數TIM_ForcedOC1Config (281)
17.2.25 庫函數TIM_ARRPreloadConfig (281)
17.2.26 庫函數TIM_SelectCOM (281)
17.2.27 庫函數TIM_SelectCCDMA (281)
17.2.28 庫函數TIM_CCPreloadControl (282)
17.2.29 庫函數TIM_OC1PreloadConfig (282)
17.2.30 庫函數TIM_OC1FastConfig (282)
17.2.31 庫函數TIM_ClearOC1Ref (283)
17.2.32 庫函數TIM_UpdateDisableConfig (283)
17.2.33 庫函數TIM_EncoderInterfaceConfig (283)
17.2.34 庫函數TIM_OC1PolarityConfig (284)
17.2.35 庫函數TIM_OC1NPolarityConfig (284)
17.2.36 庫函數TIM_CCxCmd (284)
17.2.37 庫函數TIM_CCxNCmd (285)
17.2.38 庫函數TIM_SelectOCxM (285)
17.2.39 庫函數TIM_UpdateRequestConfig (285)
17.2.40 庫函數TIM_SelectHallSensor (286)
17.2.41 庫函數TIM_SelectOnePulseMode (286)
17.2.42 庫函數TIM_SelectOutputTrigger (286)
17.2.43 庫函數TIM_SelectSlaveMode (287)
17.2.44 庫函數TIM_SelectMasterSlaveMode (288)
17.2.45 庫函數TIM_SetAutoreload (288)
17.2.46 庫函數TIM_SetCompare1 (288)
17.2.47 庫函數TIM_SetIC1Prescaler (288)
17.2.48 庫函數TIM_SetClockDivision (289)
17.2.49 庫函數TIM_GetCapture1 (289)
17.2.50 庫函數TIM_GetCounter (289)
17.2.51 庫函數TIM_GetPrescaler (289)
17.2.52 庫函數TIM_GetFlagStatus (290)
17.2.53 庫函數TIM_ClearFlag (290)
17.2.54 庫函數TIM_GetITStatus (291)
17.2.55 庫函數TIM_ClearITPendingBit (291)
思考與練習 (291)
第18章 看門狗模塊 (292)
18.1 獨立看門狗簡介 (292)
18.2 窗口看門狗簡介 (293)
18.3 IWDG庫函數說明 (295)
18.3.1 庫函數IWDG_WriteAccessCmd (295)
18.3.2 庫函數IWDG_SetPrescaler (296)
18.3.3 庫函數IWDG_SetReload (296)
18.3.4 庫函數IWDG_ReloadCounter (296)
18.3.5 庫函數IWDG_Enable (296)
18.3.6 庫函數IWDG_GetFlagStatus (297)
18.4 WWDG庫函數說明 (297)
18.4.1 庫函數WWDG_DeInit (297)
18.4.2 庫函數WWDG_SetPrescaler (297)
18.4.3 庫函數WWDG_SetWindowValue (298)
18.4.4 庫函數WWDG_EnableIT (298)
18.4.5 庫函數WWDG_SetCounter (298)
18.4.6 庫函數WWDG_Enable (298)
思考與練習 (299)
第19章 μC/OS-Ⅱ操作係統概述 (300)
19.1 μC/OS-Ⅱ簡介 (300)
19.2 實時係統概念 (300)
19.2.1 前後颱係統 (301)
19.2.2 代碼的臨界段 (301)
19.2.3 任務 (301)
19.2.4 內核 (302)
19.2.5 調度 (303)
19.2.6 可重入型 (303)
19.2.7 不可剝奪型內核 (303)
19.2.8 可剝奪型內核 (303)
19.2.9 時間片輪番調度法 (304)
19.2.10 任務優先級 (304)
19.2.11 死鎖 (304)
19.2.12 同步 (304)
19.2.13 任務間的通信 (305)
19.2.14 時鍾節拍 (305)
19.2.15 臨界段 (306)
19.3 內核結構 (306)
19.3.1 任務控製塊 (306)
19.3.2 任務調度 (307)
19.3.3 給調度器上鎖和開鎖 (307)
19.3.4 空閑任務 (308)
19.3.5 統計任務 (308)
19.3.6 ?C/OS中的中斷處理 (308)
19.3.7 時鍾節拍 (309)
19.3.8 ?C/OS-Ⅱ初始化與啓動 (309)
思考與練習 (309)
第20章 任務管理與通信 (310)
20.1 任務管理 (310)
20.1.1 建立任務 (311)
20.1.2 任務堆棧 (311)
20.1.3 刪除任務 (311)
20.1.4 請求刪除任務 (312)
20.1.5 改變任務的優先級 (312)
20.1.6 掛起任務 (313)
20.1.7 恢復任務 (313)
20.2 任務之間的通信 (313)
20.2.1 事件控製塊 (313)
20.2.2 信號量 (315)
20.2.3 郵箱 (316)
20.2.4 消息隊列 (318)
思考與練習 (320)
第21章 時間管理和內存管理 (321)
21.1 時間管理 (321)
21.1.1 任務延時函數 (321)
21.1.2 按時分秒延時函數 (322)
21.1.3 讓處在延時期的任務結束延時 (322)
21.1.4 係統時間 (322)
21.2 內存管理 (323)
21.2.1 內存控製塊 (323)
21.2.2 建立一個內存分區 (323)
21.2.3 分配一個內存塊 (324)
21.2.4 釋放一個內存塊 (324)
21.2.5 查詢一個內存分區的狀態 (324)
21.2.6 等待一個內存塊 (325)
思考與練習 (325)
參考文獻 (326)
前言/序言
前 言
Cortex-M3是ARM公司2004年推齣的基於ARM V7架構的新型微處理器內核,是市場上齣現較早、功耗較低、普及程度較高的32位ARM處理器。Cortex-M3采用瞭新型的單綫調試技術,擁有獨立的指令總綫和數據總綫,並集成瞭必要的存儲器和功能模塊,降低瞭設計和應用的難度。STM32F103x係列嵌入式處理器是意法半導體有限公司(STMicroelectronics, ST) 推齣的一款32位基於ARM Cortex-M3內核的嵌入式微控製器,主要針對控製領域中的實時應用領域,具有較強的控製功能和一定的數字信號處理能力,除可用於傳統8051係列微控製器的應用領域外,還可用於DSP處理器的領域。
本書以引導讀者快速全麵掌握STM32係列嵌入式處理器為目的,由淺入深地帶領讀者走進嵌入式世界。全書共分為兩部分:第一部分以嵌入式基本概念為平颱,介紹嵌入式微控製器各模塊的使用方法、例程,從簡單的單模塊知識到復雜的多模塊應用。第二部分主要介紹μc/os-Ⅱ操作係統的概念與應用。各章節內容安排如下:
第1章 簡要介紹嵌入式係統的概念、特點、分類、結構以及常見嵌入式操作係統和嵌入式係統的設計方法。通過本章的學習,可使讀者初步建立起嵌入式係統開發的整體框架和知識體係。
第2章 介紹Cortex-M3處理器體係結構,包括Thumb-2指令集、流水綫技術、操作模式、寄存器配置、存儲器結構、異常與處理等內容,幫助讀者初步瞭解Cortex-M3處理器的整體架構。
第3~4章 介紹STM32F1係列微控製器結構及軟件開發平颱,包括STM32F1係列微控製器的係統結構、嵌入式閃存、啓動配置及功率管理等。還介紹瞭MDK-ARM5.0開發平颱。幫助讀者在瞭解STM32F1微控製器的基本參數、重要特性的基礎上,掌握Keil集成開發環境的應用方法。
第5~18章 介紹STM32F103x嵌入式係統各功能模塊的功能、特性、使用方法及相關庫函數。包括復位與時鍾控製RCC模塊、通用輸入輸齣接口(GPIO)模塊、中斷模塊、通用定時器模塊、USART串口模塊、模數轉換器模塊、係統節拍定時器模塊、Flash存儲器模塊、SPI模塊、DMA模塊和FSMC模塊等,使讀者瞭解STM32F103x嵌入式係統各功能模塊的編程方法。
第19~21章 介紹μC/OS-Ⅱ嵌入式實時操作係統內核的相關知識。包括μC/OS-Ⅱ實時操作係統的基本概念和內核結構、μC/OS-Ⅱ任務管理、時間管理和內存管理的機製及μC/OS-Ⅱ的使用方法。
本書適用於STM32F103x嵌入式處理器的初學者,可作為高等院校儀器儀錶、電子信息、自動控製等專業嵌入式係統課程的教材,也可作為從事嵌入式係統應用開發工程師的參考資料。
本書由賈丹平編寫第1~4、14章,桂珺編寫第5~10章,劉博編寫第15~16、18~21章,趙柏山編寫第11~13章,徐耀鬆編寫第17章。全書由桂珺負責規劃、內容安排,賈丹平負責審閱校訂。本書在編寫過程中參考和藉鑒瞭大量相關資料及網絡資源,在此謹對這些作者錶示衷心的感謝。
由於編者水平和經驗所限,加之時間倉促,書中難免有疏漏和不妥之處,懇請各位老師及同行批評指正,並請您將閱讀中發現的錯誤發送到:qianrushijiaocai@163.com。
《STM32F103x微控製器嵌入式開發實戰》 內容簡介: 本書深入淺齣地講解瞭基於STM32F103x係列微控製器進行嵌入式係統開發的完整流程與核心技術。內容涵蓋從基礎的硬件原理、開發環境搭建,到STM32F103x係列微控製器的內部架構、外設接口的應用,再到嵌入式係統設計的關鍵技術,最終通過多個經典實際項目案例的實戰演練,幫助讀者全麵掌握STM32F103x微控製器的開發能力,為構建功能強大、性能優越的嵌入式應用奠定堅實基礎。 第一部分:STM32F103x微控製器基礎 第一章:嵌入式係統與STM32F103x概述 1.1 嵌入式係統入門 什麼是嵌入式係統?嵌入式係統的定義、特點(專用性、實時性、資源受限性、集成度高等)與應用領域(消費電子、工業控製、醫療設備、通信設備、汽車電子等)。 嵌入式係統的組成:硬件平颱(微處理器/微控製器、存儲器、輸入/輸齣設備、電源等)與軟件平颱(操作係統/裸機、驅動程序、應用軟件等)。 嵌入式開發的基本流程:需求分析、硬件選型、係統設計、軟件開發、調試、測試、部署與維護。 嵌入式開發的主要挑戰:資源限製、實時性要求、功耗管理、可靠性與安全性。 1.2 STM32F103x係列微控製器介紹 意法半導體(STMicroelectronics)及其STM32係列微控製器概覽。 STM32F103x係列微控製器的定位與優勢:高性能、低功耗、豐富的外設、廣泛的應用前景。 STM32F103x係列的主要型號與特點:以STM32F103C8T6、STM32F103VET6等為例,介紹不同封裝、不同FLASH/RAM容量的型號,以及它們的區彆與選擇依據。 STM32F103x核心特性:Cortex-M3內核(ARMv7-M架構)、工作頻率、存儲器(FLASH、SRAM)、時鍾係統、電源管理、低功耗模式等。 第二章:STM32F103x開發環境搭建 2.1 硬件開發平颱準備 STM32F103x開發闆的選擇與介紹:例如Nucleo闆、Discovery闆或第三方通用開發闆,介紹它們的核心功能、引腳定義、接口資源等。 必備的開發工具: USB轉串口適配器(如CH340、FT232):用於程序的下載和串口通信調試。 JTAG/SWD調試器:如ST-Link V2/V3、ULINK等,用於代碼的下載、在綫調試、斷點設置、變量監視等。 電源適配器或USB供電。 導綫、麵包闆、LED燈、電阻、按鍵等基本電子元器件。 2.2 軟件開發環境(IDE)的安裝與配置 主流STM32開發IDE介紹: Keil MDK-ARM: 詳細介紹Keil MDK-ARM的安裝步驟,包括下載、安裝、注冊(如適用),以及設置項目文件、編譯選項、調試器配置(ST-Link/J-Link)等。 STM32CubeIDE: 介紹STM32CubeIDE的安裝與使用,包括其集成開發環境、CubeMX配置工具、代碼生成功能、調試器集成等。 IAR Embedded Workbench for ARM: 簡要介紹IAR EW ARM的特點和基本配置。 STM32CubeMX配置工具的使用: CubeMX的功能概述:圖形化配置MCU引腳、時鍾、外設,生成初始化代碼。 CubeMX的安裝與啓動。 創建新工程:選擇目標MCU,進行引腳分配(GPIO、UART、SPI、I2C等)。 時鍾配置:理解HSE、HSI、PLL等時鍾源,配置主頻、APB1/APB2時鍾,生成時鍾配置文件。 外設配置:配置ADC、DAC、Timers、USART、SPI、I2C、USB、RTC等外設的參數。 中間件配置(如FreeRTOS,雖然書中不包含,但提及CubeMX的擴展性)。 代碼生成:生成C語言初始化代碼,集成到IDE工程中。 2.3 編譯、下載與調試 工程的創建與組織:新建工程、添加源文件、頭文件目錄的設置。 編寫第一個"Hello, World!"程序(LED閃爍): 理解GPIO的輸入輸齣模式配置。 編寫延時函數。 使用IDE的編譯功能生成可執行文件(.hex/.axf)。 使用調試器(ST-Link/J-Link)下載程序到STM32F103x。 設置斷點、單步執行、查看變量值、觀察寄存器狀態進行調試。 串口調試:使用USART配置,通過串口發送調試信息,使用串口助手(如XCOM、SSCOM)接收。 第三章:STM32F103x內部核心架構與工作原理 3.1 Cortex-M3處理器內核 ARMv7-M架構簡介。 Cortex-M3的特點:3級流水綫、Thumb-2指令集、NVIC(嵌套嚮量中斷控製器)、SysTick定時器、MPU(可選)。 寄存器:通用寄存器(R0-R15)、特殊功能寄存器(SP, LR, PC, PSR)、特殊寄存器(PRIMASK, FAULTMASK, BASEPRI, CONTROL)。 異常與中斷:中斷嚮量錶、中斷優先級、中斷處理流程、中斷嵌套。 內存模型:內存映射、外設寄存器地址空間。 3.2 STM32F103x存儲器結構 FLASH存儲器:程序存儲、數據存儲、擦除/寫入操作、數據手冊中的相關說明(如頁擦除、扇區擦除)。 SRAM(靜態隨機存取存儲器):用於存儲變量、堆棧、運行時數據,速度快,斷電丟失。 EEPROM(外部/內部):STM32F103x通常不內置EEPROM,但可以通過FLASH模擬或者使用外部EEPROM。 3.3 時鍾係統(RCC) 時鍾源:HSI(內部高速振蕩器)、HSE(外部高速振蕩器)、LSI(內部低速振蕩器)、LSE(外部低速振蕩器)。 PLL(鎖相環倍頻器):功能與配置,如何生成System Clock。 係統時鍾樹:AHB、APB1、APB2總綫時鍾的劃分與配置,以及外設時鍾使能。 SysTick定時器:作為Cortex-M3內核的標準定時器,用於係統節拍、RTOS時基等,與RCC的關係。 3.4 電源管理(PWR) 電源模式:運行模式、睡眠模式、停止模式、待機模式。 低功耗特性:降低工作頻率、關閉不使用的外設、進入低功耗模式。 電源域:VCC、VDDA、VBAT等。 3.5 復位與時鍾控製(RCC) 復位源:上電復位(POR)、可控復位(POR/PDR)、窗口看門狗復位(WWDG)、獨立看門狗復位(IWDG)、軟件復位、外部復位(NRST引腳)。 復位狀態寄存器。 第二部分:STM32F103x核心外設應用 第四章:通用輸入/輸齣(GPIO)接口 4.1 GPIO口工作模式 輸入模式:浮空輸入、上拉輸入、下拉輸入。 輸齣模式:推挽輸齣、開漏輸齣。 復用功能模式:配置GPIO口用於ADC、USART、SPI、I2C等其他外設。 模擬模式。 4.2 GPIO寄存器詳解 端口配置寄存器(CRL/CRH):控製模式、速度。 端口輸入數據寄存器(IDR):讀取GPIO輸入電平。 端口輸齣數據寄存器(ODR):寫入GPIO輸齣電平。 端口位設置/清除寄存器(BSRR):高效設置/清除GPIO口狀態。 端口鎖定寄存器(LCKR):鎖定GPIO配置。 4.3 GPIO應用實例 LED燈的控製:點亮、熄滅、閃爍。 按鍵的輸入與消抖:硬件消抖(上拉/下拉電阻)、軟件消抖(延時判斷、狀態機)。 GPIO中斷:配置外部中斷,實現按鍵觸發中斷。 GPIO復用功能配置:例如,配置PA9/PA10為USART1的TX/RX。 第五章:中斷係統(NVIC)與SysTick定時器 5.1 中斷嚮量錶與中斷嚮量 中斷嚮量錶的結構與作用。 STM32F103x的異常與中斷類型:外部中斷、定時器中斷、通信接口中斷等。 中斷嚮量號的含義。 5.2 嵌套嚮量中斷控製器(NVIC) NVIC的基本原理:優先級、分組、搶占。 NVIC寄存器:中斷使能寄存器(ISERx)、中斷禁用寄存器(ICERx)、中斷掛起寄存器(ISPRx)、中斷清除掛起寄存器(ICPRx)、中斷優先級寄存器(IPRx)。 中斷分組配置:設置中斷優先級分組。 中斷使能、禁用、掛起、清除掛起的操作。 5.3 外部中斷(EXTI) EXTI控製器介紹:與GPIO口相連,觸發中斷。 EXTI配置:使能EXTI綫,配置觸發方式(上升沿、下降沿、邊沿觸發),配置中斷分組。 EXTI掛起清除:中斷服務函數中必須清除EXTI掛起標誌位。 5.4 SysTick定時器 SysTick定時器的工作原理:24位遞減計數器,可配置重載值。 SysTick配置:加載重載值,選擇時鍾源,使能中斷。 SysTick中斷服務函數:通常用於實現係統時基,為RTOS提供心跳。 使用SysTick實現精確延時。 第六章:通用同步/異步串行通信(USART) 6.1 USART基本原理 同步與異步通信的區彆。 USART的通信協議:波特率、數據位、停止位、校驗位。 發送與接收流程:發送數據幀、接收數據幀。 6.2 STM32F103x USART外設 USART的硬件結構:發送移位寄存器、接收移位寄存器、波特率發生器、中斷控製。 USART的常用模式:全雙工、半雙工。 USART寄存器: 數據寄存器(DR):發送/接收數據。 狀態寄存器(SR):標誌位(TXE, RXNE, TC, PE, FE, NE, ORE)。 控製寄存器1(CR1):使能發送/接收、使能中斷。 控製寄存器2(CR2):停止位設置、時鍾使能。 控製寄存器3(CR3):LIN、SWAP、HDSEL、IRLP、IRCCR。 波特率生成器寄存器(BRR)。 6.3 USART配置與應用 波特率計算。 發送和接收數據:查詢方式、中斷方式。 串口通信實例: STM32與PC通過串口助手進行通信(發送字符串、接收命令)。 STM32之間通過串口進行通信。 STM32與藍牙模塊/GPS模塊等通過串口通信。 6.4 其他串行通信接口(UART) STM32F103x的其他UART接口(如UART4, UART5)。 第七章:串行外設接口(SPI) 7.1 SPI協議與原理 SPI總綫特點:全雙工、同步、主從模式。 SPI信號綫:MOSI(主設備輸齣/從設備輸入)、MISO(主設備輸入/從設備輸齣)、SCK(時鍾)、NSS(片選)。 SPI傳輸模式:CPOL(時鍾極性)、CPHA(時鍾相位)。 SPI數據傳輸流程。 7.2 STM32F103x SPI外設 SPI控製器的硬件結構。 SPI主模式與從模式配置。 SPI寄存器: SPI控製寄存器1(CR1):配置模式、波特率、CPOL/CPHA等。 SPI控製寄存器2(CR2):配置SS信號、中斷使能。 SPI狀態寄存器(SR):標誌位(TXE, RXNE, BSY)。 SPI數據寄存器(DR):發送/接收數據。 7.3 SPI應用實例 SPI與外部FLASH存儲器通信:讀寫FLASH數據。 SPI與SD卡通信:讀寫SD卡文件。 SPI與OLED/LCD顯示屏通信。 SPI與傳感器通信(如ADXL345加速度計)。 STM32之間通過SPI進行通信。 第八章:集成電路通信總綫(I2C) 8.1 I2C協議與原理 I2C總綫特點:半雙工、多主多從、總綫通信。 I2C信號綫:SDA(數據綫)、SCL(時鍾綫)。 I2C通信流程:起始條件、設備地址發送、讀寫操作、應答(ACK/NACK)、停止條件。 7位和10位設備地址。 8.2 STM32F103x I2C外設 I2C控製器的硬件結構。 I2C主模式與從模式配置。 I2C寄存器: I2C控製寄存器1(CR1):軟件復位、使能/禁用I2C。 I2C控製寄存器2(CR2):地址長度、發送/接收數據計數、DMA使能。 I2C自己的地址寄存器(OAR1, OAR2)。 I2C從模式地址寄存器(DR)。 I2C傳輸數據寄存器(DR)。 I2C狀態寄存器1(SR1):標誌位(SB, ADDR, TXE, RXNE, BTF, ACKERR)。 I2C狀態寄存器2(SR2)。 I2C時序控製寄存器(CCR)。 I2C TRISE寄存器。 8.3 I2C應用實例 I2C與EEPROM存儲器通信:讀寫數據。 I2C與各種傳感器通信:如溫度傳感器(LM75)、濕度傳感器(DHT11/22,雖然DHT11/22常用單總綫,但也有I2C接口的版本)、光照傳感器(BH1750)、陀螺儀/加速度計(MPU6050)。 I2C與實時時鍾(RTC)模塊通信(如DS1307)。 I2C與LCD顯示屏通信。 第九章:定時器(Timer)與脈衝寬度調製(PWM) 9.1 通用定時器(TIM) 定時器的工作原理:計數器、預分頻器、自動重載寄存器。 定時器模式:嚮上計數、嚮下計數、中心對齊計數。 定時器時鍾源:內部時鍾、外部時鍾。 定時器輸齣:捕獲/比較通道、輸齣PWM信號。 定時器輸入:輸入捕獲、編碼器接口。 STM32F103x的通用定時器(TIM2-TIM7, TIM15-TIM17)。 9.2 定時器寄存器詳解 計數器寄存器(CNT)。 預分頻器寄存器(PSC)。 自動重載寄存器(ARR)。 捕獲/比較寄存器(CCR1-CCR4)。 控製寄存器1(CR1):計數模式、方嚮、時鍾選擇。 DMA/中斷使能寄存器(DIER)。 狀態寄存器(SR):溢齣/更新中斷標誌(UIF)、捕獲/比較中斷標誌(CCxIF)。 9.3 PWM(脈衝寬度調製) PWM原理:通過改變脈衝寬度來模擬模擬信號,用於電機調速、LED亮度控製等。 在STM32F103x上生成PWM信號:配置定時器工作在PWM模式,設置ARR作為周期,CCR作為占空比。 PWM輸齣配置:輸齣通道模式(PWM模式1, PWM模式2)。 PWM應用實例: LED呼吸燈效果。 直流電機調速。 舵機控製。 9.4 PWM輸入捕獲 PWM輸入捕獲原理:測量輸入脈衝的寬度和周期。 應用:測量頻率、測量占空比。 9.5 輸入捕獲 輸入捕獲原理:記錄定時器計數值,測量外部信號的脈衝寬度。 應用:測量脈衝寬度、頻率。 第十章:模數轉換(ADC)與數模轉換(DAC) 10.1 ADC(模數轉換器) ADC基本原理:將模擬電壓信號轉換為數字信號。 STM32F103x的ADC特點:12位分辨率、多達18個通道、DMA支持、多通道掃描模式、單次轉換/連續轉換。 ADC寄存器: ADC控製寄存器1(CR1):分辨率、掃描模式、中斷使能。 ADC控製寄存器2(CR2):ADC使能/禁用、轉換模式、DMA使能、觸發源。 ADC采樣時間配置寄存器(SMPRx)。 ADC通道數配置寄存器(SQRx)。 ADC數據寄存器(DR):存儲轉換結果。 ADC通用寄存器(CDR):存儲多通道掃描結果。 ADC校準:提高轉換精度。 ADC應用實例: 讀取電位器模擬量,控製LED亮度。 測量電池電壓。 采集溫度傳感器模擬信號。 與模擬濾波器結閤使用。 10.2 DAC(數模轉換器) DAC基本原理:將數字信號轉換為模擬電壓信號。 STM32F103x的DAC特點:2個12位DAC通道,支持DMA。 DAC寄存器: DAC控製寄存器(CR):DAC通道使能、DMA使能、觸發輸齣使能。 DAC數據寄存器(DR):寫入數字值。 DAC軟件觸發寄存器(SWTR)。 DAC應用實例: 輸齣任意波形(正弦波、三角波等)。 産生可調的參考電壓。 第三部分:嵌入式係統設計與實戰項目 第十一章:嵌入式通信協議與數據傳輸 11.1 串行通信協議迴顧與擴展 UART/USART協議的深入理解。 SPI協議的深入理解。 I2C協議的深入理解。 11.2 嵌入式網絡通信(可選,如涉及,此處介紹基礎) TCP/IP協議棧基礎(如若項目涉及)。 以太網接口(若STM32F103x闆載)。 Wi-Fi模塊通信(如ESP8266)。 11.3 RS-485通信 RS-485協議特點:差分信號、遠距離、多設備總綫。 STM32F103x通過MAX485等芯片實現RS-485通信。 RS-485通信實例:多設備數據采集與控製。 11.4 CAN總綫通信(若STM32F103x闆載CAN控製器) CAN總綫協議介紹:特點、幀格式、優勢。 STM32F103x的CAN控製器使用。 CAN通信實例:車輛總綫模擬、工業控製網絡。 第十二章:存儲器管理與文件係統(可選,如涉及) 12.1 外部存儲器接口 FLASH存儲器:NOR Flash,NAND Flash(介紹基本原理和接口)。 SD卡接口:SPI模式、SDIO模式。 EEPROM:I2C EEPROM。 12.2 文件係統 FATFS文件係統介紹:標準文件係統,支持FAT16/FAT32。 如何將FATFS移植到STM32F103x,配閤SD卡實現文件讀寫。 文件係統應用:數據日誌記錄、配置文件存儲。 第十三章:實戰項目一:智能傢居溫濕度監測與數據上傳 項目概述: 使用DHT11/DHT22傳感器采集溫濕度,通過STM32F103x讀取數據,並將其通過ESP8266 Wi-Fi模塊上傳到雲服務器(如阿裏雲IoT、ThingsBoard等)。 硬件準備: STM32F103x開發闆、DHT11/DHT22溫濕度傳感器、ESP8266模塊、USB轉串口模塊、電源。 軟件設計: DHT11/DHT22傳感器數據讀取驅動的編寫。 ESP8266模塊AT指令通信(UART)。 Wi-Fi連接與MQTT協議通信。 溫濕度數據顯示與上傳。 核心技術點: 傳感器驅動開發、串口通信、AT指令控製Wi-Fi模塊、MQTT通信協議。 第十四章:實戰項目二:基於STM32F103x的步進電機精確控製係統 項目概述: 使用STM32F103x的定時器生成精確的PWM信號,通過驅動電路控製步進電機轉動,實現任意角度的定位和速度控製。 硬件準備: STM32F103x開發闆、步進電機、步進電機驅動器(如ULN2003、A4988等)、LED、按鍵、電源。 軟件設計: 步進電機驅動原理與步進模式(全步、半步、微步)。 基於定時器的PWM信號生成,精確控製步進電機脈衝頻率。 方嚮控製與使能控製。 按鍵輸入控製電機啓動、停止、正反轉、速度調整。 LED指示燈狀態顯示。 核心技術點: 定時器PWM輸齣、步進電機驅動電路、嵌入式電機控製算法。 第十五章:實戰項目三:多功能數據采集與顯示係統 項目概述: 集成多種傳感器(如光敏傳感器、霍爾傳感器、超聲波測距模塊),通過ADC、GPIO、串口等接口采集數據,並在LCD1602或OLED屏幕上顯示。 硬件準備: STM32F103x開發闆、LCD1602/OLED顯示屏、光敏傳感器、霍爾傳感器、超聲波測距模塊、按鍵、導綫、電源。 軟件設計: GPIO輸入配置,讀取霍爾傳感器信號。 ADC輸入配置,讀取光敏傳感器模擬量。 超聲波測距模塊驅動:GPIO輸齣觸發脈衝,GPIO輸入測量迴波時間。 LCD1602/OLED顯示驅動的移植或編寫。 數據顯示刷新與更新。 核心技術點: 多種接口混閤使用(GPIO, ADC, Timer for Pulse)、外部設備驅動開發、屏幕顯示控製。 附錄 STM32F103x數據手冊(Datasheet)閱讀指南 STM32F103x參考手冊(Reference Manual)關鍵章節解讀 常用STM32F103x寄存器匯總 嵌入式開發常用工具介紹 常見問題與故障排除 本書力求理論與實踐相結閤,通過清晰的講解和豐富的實例,引導讀者一步步掌握STM32F103x微控製器的開發技術,培養獨立解決嵌入式開發問題的能力,為更復雜的嵌入式項目打下堅實基礎。