简介
《STM32F系列ARM Cortex-M3核微控制器开发与应用》(笔者喻金钱、喻
斌)从实际应用需求和开发过程中所遇到的问题出发,介绍了STM32F系列ARM
芯片内外设和各个 功能模块的应用。
《STM32F系列ARM Cortex-M3核微控制器开发与应用》没有涉及有关芯
片的存储结构系统构架、指令集等理论性的知识,而是从最基本的应用要求
出发,结合大量实例,依托库函数,详细讲解I/O接口、异步串口、系统时
基定时器、SPI接口、RTC、看门狗、定时器、I2C接口、CAN接口和模数转化
器等外设接口的使用方法。本书注重实际操作和开发中的细节,对在开发过
程中容易出错的情况作出提醒,并与读者分享作者在实际开发中的一些经验
和感想,为有单片机和C语言基础的读者打开了通向嵌入式开发的大门。
本书可作为单片机爱好者的学习用书,也可作为嵌入式应用工程技术人
员的学习和培训用书,同时可作为大学生学习单片机的教材。
目录
《stm32f系列armcortex-m3核微控制器开发与应用》
第1部分 基础篇
第1章 开发板硬件结构 2
1.1 电路原理图 2
1.2 原理图说明 5
1.2.1 电源电路 5
1.2.2 系统复位电路 5
1.2.3 时钟电路 6
1.2.4 jtag接口电路 6
1.2.5 串口电路 6
1.2.6 键盘电路 7
1.2.7 led灯电路 8
1.2.8 i2c接口电路 8
1.2.9 adc电路 9
1.2.10 usb电路 10
1.2.11 can电路 10
1.2.12 语音采集和播放电路 10
1.2.13 spi接口电路 11
1.2.14 电动机驱动板接口电路 13
1.3 开发板元器件布局图 14
.1.3.1 跳线器说明 14
1.3.2 硬件资源使用 19
第2章 编译开发环境的建立 21
2.1 下载和安装ewarm 21
2.2 ide界面简介 24
2.3 生成一个新项目 25
2.3.1 建立项目文件目录,复制公共文件 25
2.3.2 生成新的工作区 25
2.3.3 生成新项目 26
2.3.4 给项目添加文件 27
2.4 修改应用文件 28
2.5 配置项目选项 29
2.5.1 通用选项设置 30
2.5.2 c/c++编译器选项设置 30
2.5.3 assembler选项设置 31
2.5.4 output converter选项设置 31
2.5.5 linker选项设置 32
2.6 flash loader demo下载器介绍 33
2.7 力源stm32f的isp下载器 36
2.8 串口调试助手介绍 37
第2部分 应用篇
第3章 通用和复用功能i/o口 40
3.1 概述 40
3.1.1 通用i/o 40
3.1.2 单独的位设置或位清除 41
3.1.3 外部中断/唤醒线 41
3.1.4 复用功能 41
3.1.5 软件重新映射i/o复用功能 41
3.1.6 gpio锁定机制 41
3.1.7 输入配置 42
3.1.8 输出配置 42
3.1.9 复用功能配置 42
3.1.10 模拟输入配置 43
3.2 库函数 43
3.2.1 函数gpio_init 43
3.2.2 函数gpio_setbits 45
3.2.3 函数gpio_resetbits 45
3.2.4 函数gpio_writebit 46
3.2.5 函数gpio_write 46
3.2.6 函数gpio_readoutputdatabit 47
3.2.7 函数gpio_readoutputdata 47
3.2.8 函数gpio_readinputdatabit 48
3.2.9 函数gpio_readinputdata 48
3.3 i/o端口的外设映射 49
3.3.1 将osc32_in/osc32_out作为pc14/pc15端口 49
3.3.2 将osc_in/osc_out引脚作为pd0/pd1端口 49
3.3.3 can复用功能重映射 50
3.3.4 jtag/swd复用功能重映射 50
3.3.5 adc复用功能重映射 51
3.3.6 定时器复用功能重映射 51
3.3.7 usart复用功能重映射 53
3.3.8 i2c1复用功能重映射 53
3.3.9 spi1复用功能重映射 53
3.4 位运算 54
3.4.1 移位运算 54
3.4.2 按位与运算 57
3.4.3 按位或运算 57
3.4.4 取反运算 58
3.4.5 异或运算 58
3.5 i/o口输出实例1——控制led灯 59
3.5.1 实例要求 59
3.5.2 硬件基础 59
3.5.3 软件结构 59
3.5.4 实例代码 60
3.5.5 编译下载和调试 68
3.6 i/o口输出实例2——流水灯 68
3.6.1 实例要求 68
3.6.2 硬件基础 68
3.6.3 软件结构 69
3.6.4 实例代码 70
3.6.5 编译下载和调试 71
3.7 i/o口输入实例——按键输入1 72
3.7.1 实例要求 72
3.7.2 硬件基础 72
3.7.3 软件结构 72
3.7.4 实例代码 73
3.7.5 编译下载和调试 75
3.8 i/o口输入实例——按键输入2 76
第4章 usart串口的一般应用 79
4.1 usart介绍 79
4.1.1 usart主要特性 79
4.1.2 usart功能概述 80
4.1.3 发送器 80
4.1.4 接收器 82
4.1.5 分数比特率的产生 83
4.1.6 多处理器通信 84
4.1.7 lin模式 84
4.1.8 usart同步模式 85
4.1.9 单线半双工通信 87
4.1.10 智能卡 87
4.1.11 irda sir endec功能块 89
4.1.12 usart中断请求 90
4.1.13 usart模式配置 91
4.2 usart串口库函数介绍 91
4.2.1 函数usart_init 91
4.2.2 函数usart_cmd 94
4.2.3 函数usart_itconfig 94
4.2.4 函数usart_senddata 95
4.2.5 函数usart_receivedata 95
4.2.6 函数usart_getflagstatus 96
4.2.7 函数usart_clearflag 97
4.2.8 函数usart_getitstatus 97
4.3 不同型号芯片的usart串口复用重映射 98
4.3.1 引脚为36的系列芯片和引脚为
48和64,容量为32kb的芯片 98
4.3.2 引脚为48的中容量芯片 99
4.3.3 引脚为64的中容量芯片 99
4.3.4 引脚为100的中容量芯片 100
4.3.5 引脚为64的大容量芯片 101
4.3.6 引脚为144的系列芯片和引脚为100的高容量芯片 102
4.4 usart通信实例1——串口发送数据 102
4.4.1 实例要求 102
4.4.2 硬件基础 103
4.4.3 软件结构 103
4.4.4 实例代码 106
4.4.5 编译下载和调试 108
4.5 usart通信实例2——中断接收数据方式 109
4.5.1 实例要求 109
4.5.2 硬件基础 109
4.5.3 软件结构 109
4.5.4 实例代码 110
4.5.5 编译下载和调试 112
4.6 使用队列收发数据实例 112
第5章 系统时基定时器 115
5.1 概述 115
5.2 库函数介绍 115
5.2.1 函数systick_clksourceconfig 115
5.2.2 函数systick_setreload 116
5.2.3 函数systick_countercmd 116
5.2.4 函数systick_itconfig 117
5.2.5 函数systick_getcounter 117
5.3 系统时基定时器实例1——嘀嗒实例 118
5.3.1 实例要求 118
5.3.2 软件结构 118
5.3.3 实例代码 119
5.3.4 编译下载和调试 120
5.4 系统时基定时器实例2——有实际应用意义的键盘实例 120
5.4.1 实例要求 120
5.4.2 软件结构 120
5.4.3 实例代码 121
5.4.4 编译下载和调试 124
第6章 外部中断和中断控制器 127
6.1 嵌套向量中断控制器 127
6.1.1 概述 127
6.1.2 中断和异常向量 127
6.1.3 中断优先级介绍 129
6.2 外部中断/事件控制器 131
6.2.1 exti控制器的主要特征 131
6.2.2 唤醒事件管理 131
6.2.3 功能说明 132
6.2.4 外部中断/事件线路映射 132
6.3 nvic库函数介绍 133
6.3.1 函数nvic_deinit 133
6.3.2 函数nvic_prioritygroupconfig 134
6.3.3 函数nvic_init 135
6.3.4 函数nvic_setvectortable 138
6.4 外部中断控制器库函数介绍 138
6.4.1 函数exti_deinit 138
6.4.2 函数exti_init 139
6.4.3 函数exti_generateswinterrupt 141
6.4.4 函数exti_getflagstatus 141
6.4.5 函数exti_clearflag 141
6.4.6 函数exti_getitstatus 142
6.5 外部中断实例 142
6.5.1 实例目的 142
6.5.2 实例要求 142
6.5.3 硬件基础 143
6.5.4 软件结构 143
6.5.5 实例代码 144
6.5.6 编译下载和调试 146
6.6 中断嵌套实例 146
6.6.1 实例目的 146
6.6.2 实例要求 146
6.6.3 硬件基础 146
6.6.4 软件结构 146
6.6.5 实例代码 148
6.6.6 编译下载和调试 149
第7章 复位和系统时钟 151
7.1 复位 151
7.1.1 系统复位 151
7.1.2 电源复位 152
7.1.3 备份区域复位 152
7.2 时钟 152
7.2.1 hse时钟 153
7.2.2 hsi时钟 154
7.2.3 pll 154
7.2.4 lse时钟 155
7.2.5 lsi时钟 155
7.2.6 系统时钟选择 156
7.2.7 时钟安全系统 156
7.2.8 rtc时钟 156
7.2.9 看门狗时钟 157
7.2.10 时钟输出 157
7.3 外设时钟 157
7.4 rcc库函数 158
7.4.1 函数rcc_deinit 158
7.4.2 函数rcc_hseconfig 158
7.4.3 函数rcc_waitforhsestartup 159
7.4.4 函数rcc_pllconfig 159
7.4.5 函数rcc_pllcmd 161
7.4.6 函数rcc_sysclkconfig 161
7.4.7 函数rcc_getsysclksource 162
7.4.8 函数rcc_hclkconfig 162
7.4.9 函数rcc_pclk1config 163
7.4.10 函数rcc_pclk2config 164
7.4.11 函数rcc_usbclkconfig 164
7.4.12 函数rcc_adcclkconfig 165
7.4.13 函数rcc_lseconfig 165
7.4.14 函数rcc_rtcclkconfig 166
7.4.15 函数rcc_rtcclkcmd 167
7.4.16 函数rcc_ahbperiph clockcmd 167
7.4.17 函数rcc_apb1periph clockcmd 168
7.4.18 函数rcc_apb2periph clockcmd 169
7.4.19 函数rcc_getflagstatus 170
7.5 系统时钟的建立 171
7.5.1 如何建立时钟 171
7.5.2 实例代码 171
第8章 实时时钟和备份寄存器 173
8.1 rtc简介 173
8.1.1 主要特性 173
8.1.2 复位过程 173
8.1.3 概述 173
8.1.4 基本操作 174
8.1.5 后备域和rtc供电 175
8.1.6 低功耗模式下的自动唤醒 176
8.2 bkp简介 176
8.2.1 bkp特性 176
8.2.2 侵入检测 177
8.3 rtc实时时钟库函数介绍 177
8.3.1 函数rtc_itconfig 177
8.3.2 函数rtc_enterconfigmode 178
8.3.3 函数rtc_exitconfigmode 178
8.3.4 函数rtc_getcounter 179
8.3.5 函数rtc_setcounter 179
8.3.6 函数rtc_setprescaler 180
8.3.7 函数rtc_setalarm 180
8.3.8 函数rtc_waitforlasttask 181
8.3.9 函数rtc_waitforsynchro 181
8.3.10 函数rtc_getflagstatus 182
8.3.11 函数rtc_clearflag 182
8.3.12 函数rtc_getitstatus 183
8.4 bkp后备域库函数介绍 183
8.4.1 函数bkp_deinit 183
8.4.2 函数bkp_tamperpinlevelconfig 184
8.4.3 函数bkp_tamperpincmd 184
8.4.4 函数bkp_writebackupregister 185
8.4.5 函数bkp_readbackupregister 186
8.4.6 函数bkp_clearitpendingbit 186
8.5 实时时钟实例——万年历 186
8.5.1 实例目的 186
8.5.2 实例要求 187
8.5.3 硬件基础 187
8.5.4 软件结构 187
8.5.5 实例代码 188
8.5.6 编译下载和调试 191
8.6 在后备域中保存数据 192
8.6.1 实例要求 192
8.6.2 硬件基础 192
8.6.3 软件结构 192
8.6.4 实例代码 193
8.6.5 编译下载和调试 194
第9章 通用spi的一般应用 195
9.1 spi简介 195
9.1.1 spi特征 195
9.1.2 spi引脚描述 196
9.1.3 数据传输模式 197
9.1.4 spi从模式 198
9.1.5 spi主模式 198
9.1.6 状态标志 199
9.1.7 利用dma的spi通信 200
9.1.8 spi中断 200
9.2 spi库函数介绍 200
9.2.1 函数spi_deinit 200
9.2.2 函数spi_init 201
9.2.3 函数spi_cmd 203
9.2.4 函数spi_itconfig 204
9.2.5 函数spi_dmacmd 205
9.2.6 函数spi_senddata 205
9.2.7 函数spi_receivedata 206
9.2.8 函数spi_getflagstatus 206
9.2.9 函数spi_clearflag 207
9.2.10 函数spi_getitstatus 207
9.2.11 函数spi_clearitpendingbit 208
9.3 spi使用 208
9.3.1 spi初始化 208
9.3.2 spi主机发送/接收数据 210
9.3.3 完整的初始化和收发数据代码 211
第10章 i2c接口的一般应用 213
10.1 i2c简介 213
10.2 i2c功能描述 213
10.2.1 模式选择 214
10.2.2 通信流 214
10.2.3 i2c从模式 214
10.2.4 i2c主模式 216
10.2.5 错误条件 219
10.2.6 sda/scl线控制 219
10.2.7 smbus 220
10.2.8 dma请求 222
10.2.9 i2c中断请求 223
10.3 i2c库函数介绍 225
10.3.1 函数i2c_deinit 225
10.3.2 函数i2c_init 225
10.3.3 函数i2c_cmd 227
10.3.4 函数i2c_generatestart 227
10.3.5 函数i2c_generatestop 228
10.3.6 函数i2c_acknowledgeconfig 228
10.3.7 函数i2c_ownaddress2config 228
10.3.8 函数i2c_dualaddresscmd 229
10.3.9 函数i2c_generalcallcmd 229
10.3.10 函数i2c_itconfig 230
10.3.11 函数i2c_senddata 230
10.3.12 函数i2c_receivedata 231
10.3.13 函数i2c_send7bitaddress 231
10.3.14 函数i2c_readregister 232
10.3.15 函数i2c_softwareresetcmd 233
10.3.16 函数i2c_getlastevent 233
10.3.17 函数i2c_checkevent 234
10.4 i2c读写24c02 235
10.4.1 实例要求 235
10.4.2 硬件基础 235
10.4.3 24c02器件介绍 235
10.4.4 软件结构 237
10.4.5 实例代码 238
10.4.6 编译下载和调试 241
第11章 adc的一般应用 243
11.1 adc介绍 243
11.1.1 adc主要特征 243
11.1.2 adc功能描述 243
11.1.3 校准 246
11.1.4 数据对齐 247
11.1.5 可编程的通道采样时间 247
11.1.6 外部触发转换 247
11.1.7 dma请求 249
11.1.8 双adc模式 249
11.1.9 温度传感器 250
11.1.10 adc中断 251
11.2 实现adc最佳精度 251
11.2.1 adc模块自身相关的误差 251
11.2.2 与环境相关的adc误差 254
11.2.3 如何减小与外部环境相关的adc误差 257
11.3 adc库函数介绍 265
11.3.1 函数adc_deinit 265
11.3.2 函数adc_init 265
11.3.3 函数adc_cmd 267
11.3.4 函数adc_dmacmd 267
11.3.5 函数adc_itconfig 268
11.3.6 函数adc_resetcalibration 268
11.3.7 函数adc_getreset calibrationstatus 269
11.3.8 函数adc_startcalibration 269
11.3.9 函数adc_getcalibrationstatus 270
11.3.10 函数adc_softwarestart convcmd 270
11.3.11 函数adc_discmodechannel countconfig 270
11.3.12 函数adc_discmodecmd 271
11.3.13 函数adc_regularchannel config 271
11.3.14 函数adc_externaltrig convconfig 273
11.3.15 函数adc_getconversionvalue 273
11.3.16 函数adc_getduelmode conversionvalue 273
11.3.17 函数adc_autoinjected convcmd 274
11.3.18 函数adc_injecteddisc modecmd 274
11.3.19 函数adc_externaltriginjected convconfig 275
11.3.20 函数adc_externaltriginjected convcmd 276
11.3.21 函数adc_softwarestartinjected convcmd 276
11.3.22 函数adc_getsoftwarestartinjected convstatus 276
11.3.23 函数adc_injectedchannle config 277
11.3.24 函数adc_injectedsequencer lengthconfig 277
11.3.25 函数adc_setinjectedoffset 278
11.3.26 函数adc_getinjected conversionvalue 279
11.3.27 函数adc_tampsensor vrefintcmd 279
11.3.28 函数adc_getflagstatus 279
11.3.29 函数adc_clearflag 280
11.4 adc数据采集实例1——单通道数据采集 281
11.4.1 实例要求 281
11.4.2 硬件基础 281
11.4.3 软件结构 281
11.4.4 实例代码 283
11.4.5 编译下载和调试 287
11.5 adc数据采集实例2——芯片温度采集 288
11.5.1 实例要求 288
11.5.2 硬件基础 288
11.5.3 软件结构 288
11.5.4 实例代码 288
11.5.5 编译下载和调试 292
第12章 嵌入式闪存的基本操作 293
12.1 嵌入式闪存介绍 293
12.1.1 特性 293
12.1.2 闪存模块组织 293
12.1.3 读操作 294
12.1.4 闪存编程和擦除控制器 295
12.2 flash固件库函数介绍 300
12.2.1 函数flash_setlatency 300
12.2.2 函数flash_halfcycle accesscmd 301
12.2.3 函数flash_prefetchbuffercmd 302
12.2.4 函数flash_unlock 302
12.2.5 函数flash_lock 303
12.2.6 函数flash_erasepage 303
12.2.7 函数flash_eraseallpages 303
12.2.8 函数flash_eraseoptionbytes 304
12.2.9 函数flash_programword 304
12.2.10 函数flash_programhalfword 305
12.2.11 函数flash_programoption bytedata 305
12.2.12 函数flash_enablewrite protection 306
12.2.13 函数flash_readout protection 307
12.2.14 函数flash_useroption byteconfig 308
12.2.15 函数flash_getuser optionbyte 309
12.2.16 函数flash_getwriteprotection optionbyte 309
12.2.17 函数flash_getreadout protectionstatus 310
12.2.18 函数flash_getprefetch bufferstatus 310
12.2.19 函数flash_itconfig 311
12.2.20 函数flash_getflagstatus 311
12.2.21 函数flash_clearflag 312
12.2.22 函数flash_getstatus 313
12.2.23 函数flash_waitfor lastoperation 313
12.3 flash读写实例 314
12.3.1 实例要求 314
12.3.2 硬件基础 314
12.3.3 软件结构 314
12.3.4 实例代码 314
12.3.5 编译下载和调试 316
第13章 定时器的一般应用 317
13.1 定时器功能简介 317
13.1.1 timx主要功能 317
13.1.2 timx功能描述 318
13.2 定时器固件库函数介绍 333
13.2.1 函数tim_deinit 333
13.2.2 函数tim_timebaseinit 334
13.2.3 函数tim_oc1init 335
13.2.4 函数tim_oc2init 337
13.2.5 函数tim_oc3init 338
13.2.6 函数tim_oc4init 339
13.2.7 函数tim_icinit 339
13.2.8 函数tim_bdtrconfig 341
13.2.9 函数tim_cmd 343
13.2.10 函数tim_ctrlpwmoutputs 343
13.2.11 函数tim_itconfig 344
13.2.12 函数tim_selectinputtrigger 345
13.2.13 函数tim_encoderinterface config 345
13.2.14 函数tim_arrpreloadconfig 346
13.2.15 函数tim_ccpreloadcontrol 347
13.2.16 函数tim_oc1preloadconfig 347
13.2.17 函数tim_oc2preloadconfig 348
13.2.18 函数tim_oc3preloadconfig 348
13.2.19 函数tim_oc4preloadconfig 349
13.2.20 函数tim_selectoutputtrigger 349
13.2.21 函数tim_selectslavemode 350
13.2.22 函数tim_selectmaster slavemode 350
13.2.23 函数tim_setcounter 351
13.2.24 函数tim_setautoreload 351
13.2.25 函数tim_getcounter 352
13.2.26 函数tim_getprescaler 352
13.2.27 函数tim_getflagstatus 353
13.2.28 函数tim_clearflag 354
13.2.29 函数tim_getitstatus 354
13.2.30 函数tim_clearitpendingbit 354
13.3 time应用实例1——简单定时器应用 355
13.3.1 实例要求 355
13.3.2 硬件基础 355
13.3.3 软件结构 355
13.3.4 实例代码 360
13.3.5 编译下载和调试 363
13.4 time应用实例2——使用一个定时器产生4路不同占空比的pwm 363
13.4.1 实例目的 363
13.4.2 实例要求 363
13.4.3 硬件基础 363
13.4.4 软件结构 363
13.4.5 实例代码 366
13.4.6 编译下载和调试 368
13.5 time应用实例3——使用定时器产生4路不同占空比和频率的pwm 368
13.5.1 实例目的 368
13.5.2 实例要求 368
13.5.3 硬件基础 369
13.5.4 软件结构 369
13.5.5 实例代码 373
13.5.6 编译下载和调试 375
13.6 time应用实例4——定时器同步 375
13.6.1 实例目的 375
13.6.2 实例要求 375
13.6.3 软件结构 376
13.6.4 实例代码 378
13.6.5 编译下载和调试 381
第14章 独立看门狗和窗口看门狗定时器 382
14.1 独立看门狗一般特性介绍 382
14.1.1 iwdg主要特性 382
14.1.2 iwdg功能描述 383
14.1.3 硬件看门狗 383
14.1.4 寄存器访问保护 383
14.2 窗口看门狗一般特性介绍 383
14.2.1 wwdg主要特性 384
14.2.2 wwdg功能描述 384
14.3 独立看门狗库函数介绍 385
14.3.1 函数iwdg_writeaccesscmd 386
14.3.2 函数iwdg_setprescaler 386
14.3.3 函数iwdg_setreload 387
14.3.4 函数iwdg_reloadcounter 387
14.3.5 函数iwdg_enable 388
14.4 窗口看门狗库函数介绍 388
14.4.1 函数wwdg_deinit 388
14.4.2 函数wwdg_setprescaler 388
14.4.3 函数wwdg_setwindow
value 389
14.4.4 函数wwdg_enableit 390
14.4.5 函数wwdg_setcounter 390
14.4.6 函数wwdg_enable 390
14.4.7 函数wwdg_getflagstatus 391
14.4.8 函数wwdg_clearflag 391
14.5 独立看门狗实例 392
14.5.1 实例目的 392
14.5.2 实例要求 392
14.5.3 硬件基础 392
14.5.4 软件结构 392
14.5.5 实例代码 393
14.5.6 编译下载和调试 394
14.6 窗口看门狗实例 395
14.6.1 实例目的 395
14.6.2 实例要求 395
14.6.3 硬件基础 395
14.6.4 软件结构 395
14.6.5 实例代码 396
14.6.6 编译下载和调试 398
第15章 控制器局域网can的一般应用 400
15.1 can介绍 400
15.1.1 bxcan主要特点 400
15.1.2 总体描述 401
15.1.3 bxcan工作模式 401
15.1.4 bxcan发送处理 403
15.1.5 时间触发通信模式 404
15.1.6 接收管理 404
15.1.7 标识符过滤 405
15.1.8 报文存储 407
15.1.9 出错管理 407
15.1.10 位时间特性 408
15.1.11 bxcan中断 408
15.2 bxcan库函数介绍 409
15.2.1 函数can_deinit 409
15.2.2 函数can_init 409
15.2.3 函数can_filterinit 411
15.2.4 函数can_structinit 413
15.2.5 函数can_itconfig 414
15.2.6 函数can_transmit 415
15.2.7 函数can_transmitstatus 416
15.2.8 函数can_canceltransmit 416
15.2.9 函数can_fiforelease 417
15.2.10 函数can_messagepending 417
15.2.11 函数can_receive 418
15.2.12 函数can_sleep 419
15.2.13 函数can_wakeup 419
15.2.14 函数can_getflagstatus 420
15.2.15 函数can_clearflag 420
15.2.16 函数can_getitstatus 421
15.2.17 函数can_clearitpendingbit 421
15.3 can收发数据实例 422
15.3.1 实例目的 422
15.3.2 实例要求 422
15.3.3 硬件基础 422
15.3.4 软件结构 423
15.3.5 实例代码 424
15.3.6 编译下载和调试 427
第3部分 提高篇
第16章 gps数据解析 430
16.1 gps数据协议解析 430
16.1.1 gps概述 430
16.1.2 gps介绍 430
16.1.3 gps数据结构介绍 431
16.2 gps数据解析实例 434
16.2.1 实例要求 434
16.2.2 硬件基础 434
16.2.3 软件结构 434
16.2.4 实例代码 435
第17章 串行flash数据储存方案 450
17.1 串行flash概述 450
17.1.1 sst25vf016b概述 450
17.1.2 sst25vf016b引脚说明 451
17.1.3 sst25vf016b接口电路 451
17.2 api软件包 452
17.2.1 软件包结构 452
17.2.2 spi初始化 452
17.2.3 读数据api 455
17.2.4 写数据api 456
17.2.5 flash擦除api 457
17.2.6 读id 459
17.3 flash数据读写实例 459
17.3.1 实例目的 460
17.3.2 实例要求 460
17.3.3 硬件基础 460
17.3.4 实例代码 460
17.3.5 编译下载和调试 463
第18章 2.4g微功耗短距离无线模块应用 464
18.1 微功耗短距离无线通信 464
18.1.1 微功耗短距离无线通信概述 464
18.1.2 短距离微功耗无线应用 464
18.2 2.4g无线模块介绍 465
18.2.1 芯片的架构 465
18.2.2 芯片主要特点 465
18.2.3 功能概述 466
18.2.4 寄存器介绍 470
18.3 无线模块相关api函数集 471
18.3.1 无线芯片的spi接口 471
18.3.2 复位 473
18.3.3 无线模块功能api软件函数集 474
18.4 数据发送/接收的时序 477
18.4.1 数据发送/接收时序 477
18.4.2 无线发送/接收数据api函数 478
18.5 读无线芯片寄存器实例 479
18.5.1 实例目的 479
18.5.2 实例要求 479
18.5.3 硬件基础 479
18.5.4 软件结构 480
18.5.5 实例代码 480
18.6 双向无线数据收发实例 484
18.6.1 实例目的 484
18.6.2 实例要求 484
18.6.3 硬件基础 485
18.6.4 实例代码 485
18.6.5 编译下载和调试 489
附录a iar工程转mdk工程 490
附录b arm处理器:选择arm7还是cortex-m3 492
第1部分 基础篇
第1章 开发板硬件结构 2
1.1 电路原理图 2
1.2 原理图说明 5
1.2.1 电源电路 5
1.2.2 系统复位电路 5
1.2.3 时钟电路 6
1.2.4 jtag接口电路 6
1.2.5 串口电路 6
1.2.6 键盘电路 7
1.2.7 led灯电路 8
1.2.8 i2c接口电路 8
1.2.9 adc电路 9
1.2.10 usb电路 10
1.2.11 can电路 10
1.2.12 语音采集和播放电路 10
1.2.13 spi接口电路 11
1.2.14 电动机驱动板接口电路 13
1.3 开发板元器件布局图 14
.1.3.1 跳线器说明 14
1.3.2 硬件资源使用 19
第2章 编译开发环境的建立 21
2.1 下载和安装ewarm 21
2.2 ide界面简介 24
2.3 生成一个新项目 25
2.3.1 建立项目文件目录,复制公共文件 25
2.3.2 生成新的工作区 25
2.3.3 生成新项目 26
2.3.4 给项目添加文件 27
2.4 修改应用文件 28
2.5 配置项目选项 29
2.5.1 通用选项设置 30
2.5.2 c/c++编译器选项设置 30
2.5.3 assembler选项设置 31
2.5.4 output converter选项设置 31
2.5.5 linker选项设置 32
2.6 flash loader demo下载器介绍 33
2.7 力源stm32f的isp下载器 36
2.8 串口调试助手介绍 37
第2部分 应用篇
第3章 通用和复用功能i/o口 40
3.1 概述 40
3.1.1 通用i/o 40
3.1.2 单独的位设置或位清除 41
3.1.3 外部中断/唤醒线 41
3.1.4 复用功能 41
3.1.5 软件重新映射i/o复用功能 41
3.1.6 gpio锁定机制 41
3.1.7 输入配置 42
3.1.8 输出配置 42
3.1.9 复用功能配置 42
3.1.10 模拟输入配置 43
3.2 库函数 43
3.2.1 函数gpio_init 43
3.2.2 函数gpio_setbits 45
3.2.3 函数gpio_resetbits 45
3.2.4 函数gpio_writebit 46
3.2.5 函数gpio_write 46
3.2.6 函数gpio_readoutputdatabit 47
3.2.7 函数gpio_readoutputdata 47
3.2.8 函数gpio_readinputdatabit 48
3.2.9 函数gpio_readinputdata 48
3.3 i/o端口的外设映射 49
3.3.1 将osc32_in/osc32_out作为pc14/pc15端口 49
3.3.2 将osc_in/osc_out引脚作为pd0/pd1端口 49
3.3.3 can复用功能重映射 50
3.3.4 jtag/swd复用功能重映射 50
3.3.5 adc复用功能重映射 51
3.3.6 定时器复用功能重映射 51
3.3.7 usart复用功能重映射 53
3.3.8 i2c1复用功能重映射 53
3.3.9 spi1复用功能重映射 53
3.4 位运算 54
3.4.1 移位运算 54
3.4.2 按位与运算 57
3.4.3 按位或运算 57
3.4.4 取反运算 58
3.4.5 异或运算 58
3.5 i/o口输出实例1——控制led灯 59
3.5.1 实例要求 59
3.5.2 硬件基础 59
3.5.3 软件结构 59
3.5.4 实例代码 60
3.5.5 编译下载和调试 68
3.6 i/o口输出实例2——流水灯 68
3.6.1 实例要求 68
3.6.2 硬件基础 68
3.6.3 软件结构 69
3.6.4 实例代码 70
3.6.5 编译下载和调试 71
3.7 i/o口输入实例——按键输入1 72
3.7.1 实例要求 72
3.7.2 硬件基础 72
3.7.3 软件结构 72
3.7.4 实例代码 73
3.7.5 编译下载和调试 75
3.8 i/o口输入实例——按键输入2 76
第4章 usart串口的一般应用 79
4.1 usart介绍 79
4.1.1 usart主要特性 79
4.1.2 usart功能概述 80
4.1.3 发送器 80
4.1.4 接收器 82
4.1.5 分数比特率的产生 83
4.1.6 多处理器通信 84
4.1.7 lin模式 84
4.1.8 usart同步模式 85
4.1.9 单线半双工通信 87
4.1.10 智能卡 87
4.1.11 irda sir endec功能块 89
4.1.12 usart中断请求 90
4.1.13 usart模式配置 91
4.2 usart串口库函数介绍 91
4.2.1 函数usart_init 91
4.2.2 函数usart_cmd 94
4.2.3 函数usart_itconfig 94
4.2.4 函数usart_senddata 95
4.2.5 函数usart_receivedata 95
4.2.6 函数usart_getflagstatus 96
4.2.7 函数usart_clearflag 97
4.2.8 函数usart_getitstatus 97
4.3 不同型号芯片的usart串口复用重映射 98
4.3.1 引脚为36的系列芯片和引脚为
48和64,容量为32kb的芯片 98
4.3.2 引脚为48的中容量芯片 99
4.3.3 引脚为64的中容量芯片 99
4.3.4 引脚为100的中容量芯片 100
4.3.5 引脚为64的大容量芯片 101
4.3.6 引脚为144的系列芯片和引脚为100的高容量芯片 102
4.4 usart通信实例1——串口发送数据 102
4.4.1 实例要求 102
4.4.2 硬件基础 103
4.4.3 软件结构 103
4.4.4 实例代码 106
4.4.5 编译下载和调试 108
4.5 usart通信实例2——中断接收数据方式 109
4.5.1 实例要求 109
4.5.2 硬件基础 109
4.5.3 软件结构 109
4.5.4 实例代码 110
4.5.5 编译下载和调试 112
4.6 使用队列收发数据实例 112
第5章 系统时基定时器 115
5.1 概述 115
5.2 库函数介绍 115
5.2.1 函数systick_clksourceconfig 115
5.2.2 函数systick_setreload 116
5.2.3 函数systick_countercmd 116
5.2.4 函数systick_itconfig 117
5.2.5 函数systick_getcounter 117
5.3 系统时基定时器实例1——嘀嗒实例 118
5.3.1 实例要求 118
5.3.2 软件结构 118
5.3.3 实例代码 119
5.3.4 编译下载和调试 120
5.4 系统时基定时器实例2——有实际应用意义的键盘实例 120
5.4.1 实例要求 120
5.4.2 软件结构 120
5.4.3 实例代码 121
5.4.4 编译下载和调试 124
第6章 外部中断和中断控制器 127
6.1 嵌套向量中断控制器 127
6.1.1 概述 127
6.1.2 中断和异常向量 127
6.1.3 中断优先级介绍 129
6.2 外部中断/事件控制器 131
6.2.1 exti控制器的主要特征 131
6.2.2 唤醒事件管理 131
6.2.3 功能说明 132
6.2.4 外部中断/事件线路映射 132
6.3 nvic库函数介绍 133
6.3.1 函数nvic_deinit 133
6.3.2 函数nvic_prioritygroupconfig 134
6.3.3 函数nvic_init 135
6.3.4 函数nvic_setvectortable 138
6.4 外部中断控制器库函数介绍 138
6.4.1 函数exti_deinit 138
6.4.2 函数exti_init 139
6.4.3 函数exti_generateswinterrupt 141
6.4.4 函数exti_getflagstatus 141
6.4.5 函数exti_clearflag 141
6.4.6 函数exti_getitstatus 142
6.5 外部中断实例 142
6.5.1 实例目的 142
6.5.2 实例要求 142
6.5.3 硬件基础 143
6.5.4 软件结构 143
6.5.5 实例代码 144
6.5.6 编译下载和调试 146
6.6 中断嵌套实例 146
6.6.1 实例目的 146
6.6.2 实例要求 146
6.6.3 硬件基础 146
6.6.4 软件结构 146
6.6.5 实例代码 148
6.6.6 编译下载和调试 149
第7章 复位和系统时钟 151
7.1 复位 151
7.1.1 系统复位 151
7.1.2 电源复位 152
7.1.3 备份区域复位 152
7.2 时钟 152
7.2.1 hse时钟 153
7.2.2 hsi时钟 154
7.2.3 pll 154
7.2.4 lse时钟 155
7.2.5 lsi时钟 155
7.2.6 系统时钟选择 156
7.2.7 时钟安全系统 156
7.2.8 rtc时钟 156
7.2.9 看门狗时钟 157
7.2.10 时钟输出 157
7.3 外设时钟 157
7.4 rcc库函数 158
7.4.1 函数rcc_deinit 158
7.4.2 函数rcc_hseconfig 158
7.4.3 函数rcc_waitforhsestartup 159
7.4.4 函数rcc_pllconfig 159
7.4.5 函数rcc_pllcmd 161
7.4.6 函数rcc_sysclkconfig 161
7.4.7 函数rcc_getsysclksource 162
7.4.8 函数rcc_hclkconfig 162
7.4.9 函数rcc_pclk1config 163
7.4.10 函数rcc_pclk2config 164
7.4.11 函数rcc_usbclkconfig 164
7.4.12 函数rcc_adcclkconfig 165
7.4.13 函数rcc_lseconfig 165
7.4.14 函数rcc_rtcclkconfig 166
7.4.15 函数rcc_rtcclkcmd 167
7.4.16 函数rcc_ahbperiph clockcmd 167
7.4.17 函数rcc_apb1periph clockcmd 168
7.4.18 函数rcc_apb2periph clockcmd 169
7.4.19 函数rcc_getflagstatus 170
7.5 系统时钟的建立 171
7.5.1 如何建立时钟 171
7.5.2 实例代码 171
第8章 实时时钟和备份寄存器 173
8.1 rtc简介 173
8.1.1 主要特性 173
8.1.2 复位过程 173
8.1.3 概述 173
8.1.4 基本操作 174
8.1.5 后备域和rtc供电 175
8.1.6 低功耗模式下的自动唤醒 176
8.2 bkp简介 176
8.2.1 bkp特性 176
8.2.2 侵入检测 177
8.3 rtc实时时钟库函数介绍 177
8.3.1 函数rtc_itconfig 177
8.3.2 函数rtc_enterconfigmode 178
8.3.3 函数rtc_exitconfigmode 178
8.3.4 函数rtc_getcounter 179
8.3.5 函数rtc_setcounter 179
8.3.6 函数rtc_setprescaler 180
8.3.7 函数rtc_setalarm 180
8.3.8 函数rtc_waitforlasttask 181
8.3.9 函数rtc_waitforsynchro 181
8.3.10 函数rtc_getflagstatus 182
8.3.11 函数rtc_clearflag 182
8.3.12 函数rtc_getitstatus 183
8.4 bkp后备域库函数介绍 183
8.4.1 函数bkp_deinit 183
8.4.2 函数bkp_tamperpinlevelconfig 184
8.4.3 函数bkp_tamperpincmd 184
8.4.4 函数bkp_writebackupregister 185
8.4.5 函数bkp_readbackupregister 186
8.4.6 函数bkp_clearitpendingbit 186
8.5 实时时钟实例——万年历 186
8.5.1 实例目的 186
8.5.2 实例要求 187
8.5.3 硬件基础 187
8.5.4 软件结构 187
8.5.5 实例代码 188
8.5.6 编译下载和调试 191
8.6 在后备域中保存数据 192
8.6.1 实例要求 192
8.6.2 硬件基础 192
8.6.3 软件结构 192
8.6.4 实例代码 193
8.6.5 编译下载和调试 194
第9章 通用spi的一般应用 195
9.1 spi简介 195
9.1.1 spi特征 195
9.1.2 spi引脚描述 196
9.1.3 数据传输模式 197
9.1.4 spi从模式 198
9.1.5 spi主模式 198
9.1.6 状态标志 199
9.1.7 利用dma的spi通信 200
9.1.8 spi中断 200
9.2 spi库函数介绍 200
9.2.1 函数spi_deinit 200
9.2.2 函数spi_init 201
9.2.3 函数spi_cmd 203
9.2.4 函数spi_itconfig 204
9.2.5 函数spi_dmacmd 205
9.2.6 函数spi_senddata 205
9.2.7 函数spi_receivedata 206
9.2.8 函数spi_getflagstatus 206
9.2.9 函数spi_clearflag 207
9.2.10 函数spi_getitstatus 207
9.2.11 函数spi_clearitpendingbit 208
9.3 spi使用 208
9.3.1 spi初始化 208
9.3.2 spi主机发送/接收数据 210
9.3.3 完整的初始化和收发数据代码 211
第10章 i2c接口的一般应用 213
10.1 i2c简介 213
10.2 i2c功能描述 213
10.2.1 模式选择 214
10.2.2 通信流 214
10.2.3 i2c从模式 214
10.2.4 i2c主模式 216
10.2.5 错误条件 219
10.2.6 sda/scl线控制 219
10.2.7 smbus 220
10.2.8 dma请求 222
10.2.9 i2c中断请求 223
10.3 i2c库函数介绍 225
10.3.1 函数i2c_deinit 225
10.3.2 函数i2c_init 225
10.3.3 函数i2c_cmd 227
10.3.4 函数i2c_generatestart 227
10.3.5 函数i2c_generatestop 228
10.3.6 函数i2c_acknowledgeconfig 228
10.3.7 函数i2c_ownaddress2config 228
10.3.8 函数i2c_dualaddresscmd 229
10.3.9 函数i2c_generalcallcmd 229
10.3.10 函数i2c_itconfig 230
10.3.11 函数i2c_senddata 230
10.3.12 函数i2c_receivedata 231
10.3.13 函数i2c_send7bitaddress 231
10.3.14 函数i2c_readregister 232
10.3.15 函数i2c_softwareresetcmd 233
10.3.16 函数i2c_getlastevent 233
10.3.17 函数i2c_checkevent 234
10.4 i2c读写24c02 235
10.4.1 实例要求 235
10.4.2 硬件基础 235
10.4.3 24c02器件介绍 235
10.4.4 软件结构 237
10.4.5 实例代码 238
10.4.6 编译下载和调试 241
第11章 adc的一般应用 243
11.1 adc介绍 243
11.1.1 adc主要特征 243
11.1.2 adc功能描述 243
11.1.3 校准 246
11.1.4 数据对齐 247
11.1.5 可编程的通道采样时间 247
11.1.6 外部触发转换 247
11.1.7 dma请求 249
11.1.8 双adc模式 249
11.1.9 温度传感器 250
11.1.10 adc中断 251
11.2 实现adc最佳精度 251
11.2.1 adc模块自身相关的误差 251
11.2.2 与环境相关的adc误差 254
11.2.3 如何减小与外部环境相关的adc误差 257
11.3 adc库函数介绍 265
11.3.1 函数adc_deinit 265
11.3.2 函数adc_init 265
11.3.3 函数adc_cmd 267
11.3.4 函数adc_dmacmd 267
11.3.5 函数adc_itconfig 268
11.3.6 函数adc_resetcalibration 268
11.3.7 函数adc_getreset calibrationstatus 269
11.3.8 函数adc_startcalibration 269
11.3.9 函数adc_getcalibrationstatus 270
11.3.10 函数adc_softwarestart convcmd 270
11.3.11 函数adc_discmodechannel countconfig 270
11.3.12 函数adc_discmodecmd 271
11.3.13 函数adc_regularchannel config 271
11.3.14 函数adc_externaltrig convconfig 273
11.3.15 函数adc_getconversionvalue 273
11.3.16 函数adc_getduelmode conversionvalue 273
11.3.17 函数adc_autoinjected convcmd 274
11.3.18 函数adc_injecteddisc modecmd 274
11.3.19 函数adc_externaltriginjected convconfig 275
11.3.20 函数adc_externaltriginjected convcmd 276
11.3.21 函数adc_softwarestartinjected convcmd 276
11.3.22 函数adc_getsoftwarestartinjected convstatus 276
11.3.23 函数adc_injectedchannle config 277
11.3.24 函数adc_injectedsequencer lengthconfig 277
11.3.25 函数adc_setinjectedoffset 278
11.3.26 函数adc_getinjected conversionvalue 279
11.3.27 函数adc_tampsensor vrefintcmd 279
11.3.28 函数adc_getflagstatus 279
11.3.29 函数adc_clearflag 280
11.4 adc数据采集实例1——单通道数据采集 281
11.4.1 实例要求 281
11.4.2 硬件基础 281
11.4.3 软件结构 281
11.4.4 实例代码 283
11.4.5 编译下载和调试 287
11.5 adc数据采集实例2——芯片温度采集 288
11.5.1 实例要求 288
11.5.2 硬件基础 288
11.5.3 软件结构 288
11.5.4 实例代码 288
11.5.5 编译下载和调试 292
第12章 嵌入式闪存的基本操作 293
12.1 嵌入式闪存介绍 293
12.1.1 特性 293
12.1.2 闪存模块组织 293
12.1.3 读操作 294
12.1.4 闪存编程和擦除控制器 295
12.2 flash固件库函数介绍 300
12.2.1 函数flash_setlatency 300
12.2.2 函数flash_halfcycle accesscmd 301
12.2.3 函数flash_prefetchbuffercmd 302
12.2.4 函数flash_unlock 302
12.2.5 函数flash_lock 303
12.2.6 函数flash_erasepage 303
12.2.7 函数flash_eraseallpages 303
12.2.8 函数flash_eraseoptionbytes 304
12.2.9 函数flash_programword 304
12.2.10 函数flash_programhalfword 305
12.2.11 函数flash_programoption bytedata 305
12.2.12 函数flash_enablewrite protection 306
12.2.13 函数flash_readout protection 307
12.2.14 函数flash_useroption byteconfig 308
12.2.15 函数flash_getuser optionbyte 309
12.2.16 函数flash_getwriteprotection optionbyte 309
12.2.17 函数flash_getreadout protectionstatus 310
12.2.18 函数flash_getprefetch bufferstatus 310
12.2.19 函数flash_itconfig 311
12.2.20 函数flash_getflagstatus 311
12.2.21 函数flash_clearflag 312
12.2.22 函数flash_getstatus 313
12.2.23 函数flash_waitfor lastoperation 313
12.3 flash读写实例 314
12.3.1 实例要求 314
12.3.2 硬件基础 314
12.3.3 软件结构 314
12.3.4 实例代码 314
12.3.5 编译下载和调试 316
第13章 定时器的一般应用 317
13.1 定时器功能简介 317
13.1.1 timx主要功能 317
13.1.2 timx功能描述 318
13.2 定时器固件库函数介绍 333
13.2.1 函数tim_deinit 333
13.2.2 函数tim_timebaseinit 334
13.2.3 函数tim_oc1init 335
13.2.4 函数tim_oc2init 337
13.2.5 函数tim_oc3init 338
13.2.6 函数tim_oc4init 339
13.2.7 函数tim_icinit 339
13.2.8 函数tim_bdtrconfig 341
13.2.9 函数tim_cmd 343
13.2.10 函数tim_ctrlpwmoutputs 343
13.2.11 函数tim_itconfig 344
13.2.12 函数tim_selectinputtrigger 345
13.2.13 函数tim_encoderinterface config 345
13.2.14 函数tim_arrpreloadconfig 346
13.2.15 函数tim_ccpreloadcontrol 347
13.2.16 函数tim_oc1preloadconfig 347
13.2.17 函数tim_oc2preloadconfig 348
13.2.18 函数tim_oc3preloadconfig 348
13.2.19 函数tim_oc4preloadconfig 349
13.2.20 函数tim_selectoutputtrigger 349
13.2.21 函数tim_selectslavemode 350
13.2.22 函数tim_selectmaster slavemode 350
13.2.23 函数tim_setcounter 351
13.2.24 函数tim_setautoreload 351
13.2.25 函数tim_getcounter 352
13.2.26 函数tim_getprescaler 352
13.2.27 函数tim_getflagstatus 353
13.2.28 函数tim_clearflag 354
13.2.29 函数tim_getitstatus 354
13.2.30 函数tim_clearitpendingbit 354
13.3 time应用实例1——简单定时器应用 355
13.3.1 实例要求 355
13.3.2 硬件基础 355
13.3.3 软件结构 355
13.3.4 实例代码 360
13.3.5 编译下载和调试 363
13.4 time应用实例2——使用一个定时器产生4路不同占空比的pwm 363
13.4.1 实例目的 363
13.4.2 实例要求 363
13.4.3 硬件基础 363
13.4.4 软件结构 363
13.4.5 实例代码 366
13.4.6 编译下载和调试 368
13.5 time应用实例3——使用定时器产生4路不同占空比和频率的pwm 368
13.5.1 实例目的 368
13.5.2 实例要求 368
13.5.3 硬件基础 369
13.5.4 软件结构 369
13.5.5 实例代码 373
13.5.6 编译下载和调试 375
13.6 time应用实例4——定时器同步 375
13.6.1 实例目的 375
13.6.2 实例要求 375
13.6.3 软件结构 376
13.6.4 实例代码 378
13.6.5 编译下载和调试 381
第14章 独立看门狗和窗口看门狗定时器 382
14.1 独立看门狗一般特性介绍 382
14.1.1 iwdg主要特性 382
14.1.2 iwdg功能描述 383
14.1.3 硬件看门狗 383
14.1.4 寄存器访问保护 383
14.2 窗口看门狗一般特性介绍 383
14.2.1 wwdg主要特性 384
14.2.2 wwdg功能描述 384
14.3 独立看门狗库函数介绍 385
14.3.1 函数iwdg_writeaccesscmd 386
14.3.2 函数iwdg_setprescaler 386
14.3.3 函数iwdg_setreload 387
14.3.4 函数iwdg_reloadcounter 387
14.3.5 函数iwdg_enable 388
14.4 窗口看门狗库函数介绍 388
14.4.1 函数wwdg_deinit 388
14.4.2 函数wwdg_setprescaler 388
14.4.3 函数wwdg_setwindow
value 389
14.4.4 函数wwdg_enableit 390
14.4.5 函数wwdg_setcounter 390
14.4.6 函数wwdg_enable 390
14.4.7 函数wwdg_getflagstatus 391
14.4.8 函数wwdg_clearflag 391
14.5 独立看门狗实例 392
14.5.1 实例目的 392
14.5.2 实例要求 392
14.5.3 硬件基础 392
14.5.4 软件结构 392
14.5.5 实例代码 393
14.5.6 编译下载和调试 394
14.6 窗口看门狗实例 395
14.6.1 实例目的 395
14.6.2 实例要求 395
14.6.3 硬件基础 395
14.6.4 软件结构 395
14.6.5 实例代码 396
14.6.6 编译下载和调试 398
第15章 控制器局域网can的一般应用 400
15.1 can介绍 400
15.1.1 bxcan主要特点 400
15.1.2 总体描述 401
15.1.3 bxcan工作模式 401
15.1.4 bxcan发送处理 403
15.1.5 时间触发通信模式 404
15.1.6 接收管理 404
15.1.7 标识符过滤 405
15.1.8 报文存储 407
15.1.9 出错管理 407
15.1.10 位时间特性 408
15.1.11 bxcan中断 408
15.2 bxcan库函数介绍 409
15.2.1 函数can_deinit 409
15.2.2 函数can_init 409
15.2.3 函数can_filterinit 411
15.2.4 函数can_structinit 413
15.2.5 函数can_itconfig 414
15.2.6 函数can_transmit 415
15.2.7 函数can_transmitstatus 416
15.2.8 函数can_canceltransmit 416
15.2.9 函数can_fiforelease 417
15.2.10 函数can_messagepending 417
15.2.11 函数can_receive 418
15.2.12 函数can_sleep 419
15.2.13 函数can_wakeup 419
15.2.14 函数can_getflagstatus 420
15.2.15 函数can_clearflag 420
15.2.16 函数can_getitstatus 421
15.2.17 函数can_clearitpendingbit 421
15.3 can收发数据实例 422
15.3.1 实例目的 422
15.3.2 实例要求 422
15.3.3 硬件基础 422
15.3.4 软件结构 423
15.3.5 实例代码 424
15.3.6 编译下载和调试 427
第3部分 提高篇
第16章 gps数据解析 430
16.1 gps数据协议解析 430
16.1.1 gps概述 430
16.1.2 gps介绍 430
16.1.3 gps数据结构介绍 431
16.2 gps数据解析实例 434
16.2.1 实例要求 434
16.2.2 硬件基础 434
16.2.3 软件结构 434
16.2.4 实例代码 435
第17章 串行flash数据储存方案 450
17.1 串行flash概述 450
17.1.1 sst25vf016b概述 450
17.1.2 sst25vf016b引脚说明 451
17.1.3 sst25vf016b接口电路 451
17.2 api软件包 452
17.2.1 软件包结构 452
17.2.2 spi初始化 452
17.2.3 读数据api 455
17.2.4 写数据api 456
17.2.5 flash擦除api 457
17.2.6 读id 459
17.3 flash数据读写实例 459
17.3.1 实例目的 460
17.3.2 实例要求 460
17.3.3 硬件基础 460
17.3.4 实例代码 460
17.3.5 编译下载和调试 463
第18章 2.4g微功耗短距离无线模块应用 464
18.1 微功耗短距离无线通信 464
18.1.1 微功耗短距离无线通信概述 464
18.1.2 短距离微功耗无线应用 464
18.2 2.4g无线模块介绍 465
18.2.1 芯片的架构 465
18.2.2 芯片主要特点 465
18.2.3 功能概述 466
18.2.4 寄存器介绍 470
18.3 无线模块相关api函数集 471
18.3.1 无线芯片的spi接口 471
18.3.2 复位 473
18.3.3 无线模块功能api软件函数集 474
18.4 数据发送/接收的时序 477
18.4.1 数据发送/接收时序 477
18.4.2 无线发送/接收数据api函数 478
18.5 读无线芯片寄存器实例 479
18.5.1 实例目的 479
18.5.2 实例要求 479
18.5.3 硬件基础 479
18.5.4 软件结构 480
18.5.5 实例代码 480
18.6 双向无线数据收发实例 484
18.6.1 实例目的 484
18.6.2 实例要求 484
18.6.3 硬件基础 485
18.6.4 实例代码 485
18.6.5 编译下载和调试 489
附录a iar工程转mdk工程 490
附录b arm处理器:选择arm7还是cortex-m3 492
STM32F系列ARM Cortex-M3核微控制器开发与应用
光盘服务联系方式: 020-38250260 客服QQ:4006604884
云图客服:
用户发送的提问,这种方式就需要有位在线客服来回答用户的问题,这种 就属于对话式的,问题是这种提问是否需要用户登录才能提问
Video Player
×
Audio Player
×
pdf Player
×
亲爱的云图用户,
光盘内的文件都可以直接点击浏览哦
无需下载,在线查阅资料!