| 作者 |
| [美]凯文·M. 林奇(Kevin M. Lynch) 尼古拉斯·马丘克(Nicholas Marchuk) 马修·L. 艾尔文(Matthew L. Elwin)刘火良 杨森 |
| 丛书名 |
| 电子电气工程师技术丛书 |
| 出版社 |
| 机械工业出版社 |
| ISBN |
| 9781911041650 |
| 简要 |
| 简介 |
| 内容简介书籍计算机书籍 ---------------------------嵌入式计算与机电一体化技术:基于PIC32微控制器--------------------------- 本书是美国西北大学机电一体化系列课程的教材,选择PIC32MX795F512H微控制器 + NU32开发板,基础知识部分重点讲解PIC32的硬件、C语言编程以及与传感器和执行机构的接口,应用部分关注机电一体化技术,包括传感器、传动装置和电机的选择等。各章节全面融合PIC32参考手册、数据表、XC32 C编译器用户指南、Harmony帮助文档等内容,并配有丰富的教辅资源,适合PIC32初学者、Arduino爱好者以及对传感器和嵌入式控制感兴趣的技术人员阅读。 ---------------------------FreeRTOS内核实现与应用开发实战指南:基于STM32--------------------------- 本书基于野火STM32全系列开发板介绍FreeRTOS内核实现与应用开发,全书分为两部分:第一部分教你如何从0到1把FreeRTOS内核写出来,从底层的汇编开始,讲解任务如何定义、如何切换,还讲解了阻塞延时如何实现,如何支持多优先级,如何实现定时器以及时间片等FreeRTOS的核心知识点;第二部分则开始讲解FreeRTOS内核组件的应用以及如何使用FreeRTOS进行多任务编程。 本书内容翔实,案例丰富,配有大量示例代码,适合作为嵌入式领域工程师和爱好者的技术参考书,也适合相关专业的学生学习参考。 |
| 目录 |
---------------------------嵌入式计算与机电一体化技术:基于PIC32微控制器--------------------------- 前 言 第一部分 快速入门 第1章 快速入门 2 1.1 编程资源 2 1.2 编译bootloader程序 5 1.3 编译第一个程序 6 1.4 加载第一个程序 7 1.5 使用make命令 8 1.6 小结 12 延伸阅读 12 第二部分 基础知识 第2章 硬件 14 2.1 PIC32微控制器 14 2.2 NU32开发板 23 2.3 小结 26 2.4 练习题 26 延伸阅读 28 第3章 软件 29 3.1 虚拟内存映射 29 3.2 示例:simplePIC.c 30 3.3 编译过程 31 3.4 PIC32复位过程 33 3.5 理解simplePIC.c 34 3.6 引导加载程序与独立程序 43 3.7 编译小结 44 3.8 实用命令行工具 46 3.9 小结 47 3.10 练习题 47 延伸阅读 48 第4章 函数库 49 4.1 创建talkingPIC 50 4.2 NU32函数库 51 4.3 引导加载程序 52 4.4 LCD函数库 53 4.5 Microchip函数库 55 4.6 自定义函数库 56 4.7 小结 56 4.8 练习题 57 延伸阅读 57 第5章 执行时间和存储空间 58 5.1 编译器优化 58 5.2 执行时间和反汇编文件 59 5.3 存储空间和映射文件 66 5.4 小结 70 5.5 练习题 71 延伸阅读 75 第6章 中断 76 6.1 概述 76 6.2 详述 77 6.3 配置和使用中断的步骤 84 6.4 示例代码 85 6.5 小结 92 6.6 练习题 93 延伸阅读 95 第三部分 外设参考 第7章 数字输入和输出 98 7.1 概述 98 7.2 详述 100 7.3 示例代码 102 7.4 小结 103 7.5 练习题 104 延伸阅读 104 第8章 计数器/定时器 105 8.1 概述 105 8.2 详述 107 8.3 示例代码 110 8.4 小结 113 8.5 练习题 113 延伸阅读 113 第9章 输出比较 114 9.1 概述 114 9.2 详述 115 9.3 示例代码 118 9.4 小结 121 9.5 练习题 121 延伸阅读 123 第10章 模拟输入 124 10.1 概述 124 10.2 详述 127 10.3 示例代码 130 10.4 小结 135 10.5 练习题 136 延伸阅读 136 第11章 UART 137 11.1 概述 137 11.2 详述 139 11.3 示例代码 141 11.4 使用XBee模块进行无线通信 152 11.5 小结 152 11.6 练习题 153 延伸阅读 153 第12章 SPI通信 154 12.1 概述 154 12.2 详述 155 12.3 示例代码 158 12.4 小结 165 12.5 练习题 166 延伸阅读 166 第13章 I2C通信 167 13.1 概述 167 13.2 详述 169 13.3 示例代码 171 13.4 小结 186 13.5 练习题 186 延伸阅读 186 第14章 并行主端口 187 14.1 概述 187 14.2 详述 188 14.3 示例代码 189 14.4 小结 194 14.5 练习题 194 延伸阅读 194 第15章 输入捕获 195 15.1 概述 195 15.2 详述 196 15.3 示例代码 197 15.4 小结 199 15.5 练习题 199 延伸阅读 199 第16章 比较器 200 16.1 概述 200 16.2 详述 200 16.3 示例代码 202 16.4 小结 204 16.5 练习题 204 延伸阅读 204 第17章 休眠、空闲和看门狗定时器 205 17.1 概述 205 17.2 详述 206 17.3 示例代码 207 17.4 小结 209 17.5 练习题 209 延伸阅读 209 第18章 闪速存储器 210 18.1 概述 210 18.2 详述 211 18.3 示例代码 212 18.4 小结 217 18.5 练习题 217 延伸阅读 217 第19章 控制器局域网络 218 19.1 概述 218 19.2 详述 220 19.3 示例代码 228 19.4 小结 232 19.5 练习题 233 延伸阅读 233 第20章 Harmony模块及其USB接口应用 234 20.1 概述 234 20.2 框架 235 20.3 PLIB函数库 237 20.4 Harmony概念 239 20.5 驱动程序 240 20.6 系统服务程序 251 20.7 程序结构 255 20.8 USB 260 20.9 小结 277 20.10 练习题 277 延伸阅读 277 第四部分 机电一体化应用 第21章 传感器 280 21.1 接触传感器:按钮和开关 280 21.2 光敏传感器 281 21.3 转动关节的角度 284 21.4 移动关节的位置 288 21.5 加速度和角速度:陀螺仪、加速度计和惯性测量装置 289 21.6 磁场感应:霍尔效应传感器 291 21.7 距离 292 21.8 压力 293 21.9 温度 294 21.10 电流 295 21.11 GPS 296 21.12 练习题 296 延伸阅读 297 第22章 数字信号处理 298 22.1 采样信号和混叠 298 22.2 离散傅里叶变换 300 22.3 有限脉冲响应数字滤波器 306 22.4 无限脉冲响应数字滤波器 319 22.5 基于FFT的滤波器 320 22.6 PIC32的DSP函数库 322 22.7 练习题 330 延伸阅读 331 第23章 PID反馈控制 332 23.1 PID控制器 333 23.2 PID控制器的变体 335 23.3 增益调节的经验方法 336 23.4 基于模型的控制 337 23.5 小结 338 23.6 练习题 339 延伸阅读 340 第24章 LED亮度的反馈控制 341 24.1 电路的接线和测试 342 24.2 通过OC1为LED供电 343 24.3 生成开环PWM波形 343 24.4 与MATLAB建立通信 344 24.5 在MATLAB中利用数据绘图 344 24.6 写入LCD屏幕 348 24.7 读取ADC 348 24.8 PI控制 348 24.9 其他特性 349 24.10 小结 349 24.11 练习题 349 第25章 有刷永磁直流电机 350 25.1 电机的物理知识 350 25.2 控制方程 354 25.3 速度-转矩曲线 355 25.4 摩擦力和电机效率 358 25.5 电机绕组和电机常数 360 25.6 其他电机特性 361 25.7 电机数据表 362 25.8 小结 365 25.9 练习题 366 延伸阅读 370 第26章 传动装置和电机选择 371 26.1 传动装置 371 26.2 电机和减速器的选择 375 26.3 小结 377 26.4 练习题 377 延伸阅读 378 第27章 直流电机控制 379 27.1 H桥和脉宽调制 379 27.2 直流电机的运动控制 387 27.3 小结 391 27.4 练习题 391 延伸阅读 393 第28章 电机控制项目 394 28.1 硬件 394 28.2 软件概述 395 28.3 软件开发技巧 400 28.4 基本步骤 403 28.5 扩展设计 419 28.6 小结 420 28.7 练习题 420 第29章 其他执行机构 421 29.1 螺线管 421 29.2 扬声器和音圈执行机构 422 29.3 RC伺服电机 423 29.4 步进电机 424 29.5 无刷直流电机 428 29.6 线性无刷电机 439 29.7 小结 439 29.8 练习题 439 延伸阅读 440 ---------------------------FreeRTOS内核实现与应用开发实战指南:基于STM32--------------------------- 前 言 引 言 第一部分 从0到1教你写FreeRTOS内核 第1章 初识FreeRTOS 2 1.1 FreeRTOS版权 2 1.2 FreeRTOS收费问题 2 1.2.1 FreeRTOS 2 1.2.2 OpenRTOS 2 1.2.3 SaveRTOS 3 1.3 FreeRTOS资料获取 3 1.3.1 获取源码 3 1.3.2 获取书籍 4 1.3.3 快速入门 4 1.4 FreeRTOS的编程风格 5 1.4.1 数据类型 5 1.4.2 变量名 6 1.4.3 函数名 6 1.4.4 宏 7 1.4.5 格式 7 第2章 新建FreeRTOS工程—软件仿真 8 2.1 新建本地工程文件夹 8 2.2 使用KEIL新建工程 8 2.2.1 New Project 9 2.2.2 Select Device for Target 9 2.2.3 Manage Run-Time Environment 10 2.3 在KEIL工程中新建文件组 11 2.4 在KEIL工程中添加文件 11 2.5 调试配置 13 2.5.1 设置软件仿真 13 2.5.2 修改时钟大小 13 2.5.3 添加头文件路径 13 第3章 裸机系统与多任务系统 15 3.1 裸机系统 15 3.1.1 轮询系统 15 3.1.2 前后台系统 16 3.2 多任务系统 17 第4章 数据结构—列表与列表项 20 4.1 C语言链表 20 4.1.1 单向链表 20 4.1.2 双向链表 22 4.1.3 链表与数组的对比 22 4.2 FreeRTOS中链表的实现 23 4.2.1 实现链表节点 23 4.2.2 实现链表根节点 25 4.3 链表节点插入实验 31 4.4 实验现象 34 第5章 任务的定义与任务切换 35 5.1 本章目标 35 5.2 什么是任务 36 5.3 创建任务 37 5.3.1 定义任务栈 37 5.3.2 定义任务函数 38 5.3.3 定义任务控制块 39 5.3.4 实现任务创建函数 40 5.4 实现就绪列表 45 5.4.1 定义就绪列表 45 5.4.2 就绪列表初始化 45 5.4.3 将任务插入就绪列表 46 5.5 实现调度器 49 5.5.1 启动调度器 49 5.5.2 任务切换 54 5.6 main()函数 58 5.7 实验现象 61 5.8 本章涉及的汇编指令 64 第6章 临界段的保护 65 6.1 什么是临界段 65 6.2 Cortex-M内核快速关中断指令 65 6.3 关中断 66 6.3.1 不带返回值的关中断函数 66 6.3.2 带返回值的关中断函数 67 6.4 开中断 67 6.5 进入/退出临界段的宏 68 6.5.1 进入临界段 68 6.5.2 退出临界段 69 6.6 临界段代码的应用 70 6.7 实验现象 71 第7章 空闲任务与阻塞延时 72 7.1 实现空闲任务 72 7.1.1 定义空闲任务的栈 72 7.1.2 定义空闲任务的任务控制块 73 7.1.3 创建空闲任务 73 7.2 实现阻塞延时 74 7.2.1 vTaskDelay()函数 74 7.2.2 修改vTaskSwitchContext()函数 75 7.3 SysTick中断服务函数 77 7.4 SysTick初始化函数 78 7.5 main()函数 80 7.6 实验现象 83 第8章 多优先级 84 8.1 支持多优先级的方法 84 8.2 查找最高优先级的就绪任务相关代码 85 8.2.1 通用方法 87 8.2.2 优化方法 87 8.3 修改代码以支持多优先级 89 8.3.1 修改任务控制块 89 8.3.2 修改xTaskCreateStatic()函数 89 8.3.3 修改vTaskStartScheduler()函数 93 8.3.4 修改vTaskDelay()函数 94 8.3.5 修改vTaskSwitchContext()函数 95 8.3.6 修改xTaskIncrementTick()函数 96 8.4 main()函数 97 8.5 实验现象 100 第9章 任务延时列表 102 9.1 任务延时列表的工作原理 102 9.2 实现任务延时列表 103 9.2.1 定义任务延时列表 103 9.2.2 任务延时列表初始化 103 9.2.3 定义xNextTaskUnblock-Time 103 9.2.4 初始化xNextTaskUnblock-Time 104 9.3 修改代码以支持任务延时列表 104 9.3.1 修改vTaskDelay()函数 105 9.3.2 修改xTaskIncrementTick()函数 107 9.3.3 修改taskRESET_READY_PRIORITY()函数 109 9.4 main()函数 110 9.5 实验现象 110 第10章 时间片 111 10.1 时间片测试实验 111 10.2 main.c文件 112 10.3 实验现象 115 10.4 原理分析 116 10.4.1 taskSELECT_HIGHEST_PRIORITY_TASK()函数 116 10.4.2 taskRESET_READY_PRIORITY()函数 117 10.5 修改代码以支持优先级 118 10.5.1 修改xPortSysTick-Handler()函数 118 10.5.2 修改xTaskIncrement-Tick()函数 119 第二部分 FreeRTOS内核应用开发 第11章 移植FreeRTOS到STM32 124 11.1 获取STM32的裸机工程模板 124 11.2 下载FreeRTOS V9.0.0源码 124 11.3 FreeRTOS文件夹内容 126 11.3.1 FreeRTOS文件夹 126 11.3.2 FreeRTOS-Plus文件夹 128 11.3.3 HTML文件 129 11.4 向裸机工程中添加FreeRTOS源码 129 11.4.1 提取FreeRTOS最简源码 129 11.4.2 复制FreeRTOS到裸机工程根 130 11.4.3 复制FreeRTOSConfig.h文件到User文件夹 131 11.4.4 添加FreeRTOS源码到工程组文件夹 131 11.5 修改FreeRTOSConfig.h文件 133 11.5.1 FreeRTOSConfig.h文件内容 133 11.5.2 修改FreeRTOSConfig.h文件 143 11.6 修改stm32f10x_it.c文件 147 11.7 修改main.c文件 151 11.8 下载验证 152 第12章 任务 153 12.1 硬件初始化 153 12.2 创建单任务—SRAM静态内存 155 12.2.1 定义任务函数 155 12.2.2 空闲任务与定时器任务栈函数实现 155 12.2.3 定义任务栈 157 12.2.4 定义任务控制块 157 12.2.5 静态创建任务 158 12.2.6 启动任务 159 12.2.7 main.c文件 159 12.3 下载验证SRAM静态内存单任务 164 12.4 创建单任务—SRAM动态内存 164 12.4.1 动态内存空间堆的来源 164 12.4.2 定义任务函数 165 12.4.3 定义任务栈 166 12.4.4 定义任务控制块指针 166 12.4.5 动态创建任务 166 12.4.6 启动任务 167 12.4.7 main.c文件 167 12.5 下载验证SRAM动态内存单任务 171 12.6 创建多任务—SRAM动态内存 171 12.7 下载验证SRAM动态内存多任务 175 第13章 FreeRTOS的启动流程 176 13.1 “万事俱备,只欠东风”法 176 13.2 “小心翼翼,十分谨慎”法 177 13.3 两种方法的适用情况 179 13.4 FreeRTOS的启动流程 179 13.4.1 创建任务函数xTaskCreate() 179 13.4.2 开启调度器函数vTask-StartScheduler() 181 13.4.3 main()函数 185 第14章 任务管理 188 14.1 任务的基本概念 188 14.2 任务调度器的基本概念 188 14.3 任务状态的概念 189 14.4 任务状态迁移 190 14.5 常用的任务函数 191 14.5.1 任务挂起函数 191 14.5.2 任务恢复函数 195 14.5.3 任务删除函数 203 14.5.4 任务延时函数 207 14.6 任务的设计要点 215 14.7 任务管理实验 216 14.8 实验现象 221 第15章 消息队列 222 15.1 消息队列的基本概念 222 15.2 消息队列的运作机制 222 15.3 消息队列的阻塞机制 223 15.4 消息队列的应用场景 224 15.5 消息队列控制块 224 15.6 常用的消息队列函数 226 15.6.1 消息队列动态创建函数 226 15.6.2 消息队列静态创建函数 232 15.6.3 消息队列删除函数 233 15.6.4 向消息队列发送消息函数 234 15.6.5 从消息队列读取消息函数 244 15.7 消息队列注意事项 251 15.8 消息队列实验 252 15.9 实验现象 256 第16章 信号量 258 16.1 信号量的基本概念 258 16.1.1 二值信号量 258 16.1.2 计数信号量 259 16.1.3 互斥信号量 259 16.1.4 递归信号量 259 16.2 二值信号量的应用场景 260 16.3 二值信号量的运作机制 260 16.4 计数信号量的运作机制 261 16.5 信号量控制块 262 16.6 常用的信号量函数 263 16.6.1 信号量创建函数 263 16.6.2 信号量删除函数 268 16.6.3 信号量释放函数 268 16.6.4 信号量获取函数 271 16.7 信号量实验 273 16.7.1 二值信号量同步实验 273 16.7.2 计数信号量实验 277 16.8 实验现象 282 16.8.1 二值信号量实验现象 282 16.8.2 计数信号量实验现象 283 第17章 互斥量 284 17.1 互斥量的基本概念 284 17.2 互斥量的优先级继承机制 284 17.3 互斥量的应用场景 287 17.4 互斥量的运作机制 287 17.5 互斥量控制块 288 17.6 互斥量函数 289 17.6.1 互斥量创建函数xSema-phoreCreateMutex() 289 17.6.2 递归互斥量创建函数xSemaphoreCreateRecur-siveMutex() 292 17.6.3 互斥量删除函数vSema-phoreDelete() 293 17.6.4 互斥量获取函数xSema-phoreTake() 293 17.6.5 递归互斥量获取函数xSemaphoreTakeRecur-sive() 299 17.6.6 互斥量释放函数xSema-phoreGive() 301 17.6.7 递归互斥量释放函数xSemaphoreGiveRecur-sive() 304 17.7 互斥量实验 307 17.7.1 模拟优先级翻转实验 307 17.7.2 互斥量降低优先级翻转危害实验 312 17.8 实验现象 318 17.8.1 模拟优先级翻转实验现象 318 17.8.2 互斥量降低优先级翻转危害实验现象 318 第18章 事件 320 18.1 事件的基本概念 320 18.2 事件的应用场景 321 18.3 事件的运作机制 321 18.4 事件控制块 323 18.5 事件函数 323 18.5.1 事件创建函数xEvent-GroupCreate() 323 18.5.2 事件删除函数vEvent-GroupDelete() 325 18.5.3 事件组置位函数xEvent-GroupSetBits()(任务) 326 18.5.4 事件组置位函数xEvent-GroupSetBitsFromISR()(中断) 330 18.5.5 等待事件函数xEvent-GroupWaitBits() 332 18.5.6 清除事件组指定位函数xEventGroupClearBits()与xEventGroupClearBits-FromISR() 337 18.6 事件实验 338 18.7 实验现象 343 第19章 软件定时器 344 19.1 软件定时器的基本概念 344 19.2 软件定时器的应用场景 345 19.3 软件定时器的精度 345 19.4 软件定时器的运作机制 346 19.5 软件定时器控制块 348 19.6 软件定时器函数 349 19.6.1 软件定时器创建函数 349 19.6.2 软件定时器启动函数 352 19.6.3 软件定时器停止函数 356 19.6.4 软件定时器任务 358 19.6.5 软件定时器删除函数 365 19.7 软件定时器实验 366 19.8 实验现象 371 第20章 任务通知 372 20.1 任务通知的基本概念 372 20.2 任务通知的运作机制 372 20.3 任务通知的数据结构 373 20.4 任务通知函数 374 20.4.1 发送任务通知函数 374 20.4.2 获取任务通知函数 391 20.5 任务通知实验 398 20.5.1 任务通知代替消息队列 398 20.5.2 任务通知代替二值信号量 404 20.5.3 任务通知代替计数信号量 409 20.5.4 任务通知代替事件组 414 20.6 实验现象 419 20.6.1 任务通知代替消息队列实验现象 419 20.6.2 任务通知代替二值信号量实验现象 420 20.6.3 任务通知代替计数信号量实验现象 420 20.6.4 任务通知代替事件组实验现象 421 第21章 内存管理 422 21.1 内存管理的基本概念 422 21.2 内存管理的应用场景 423 21.3 内存管理方案详解 424 21.3.1 heap_1.c 424 21.3.2 heap_2.c 428 21.3.3 heap_3.c 436 21.3.4 heap_4.c 438 21.3.5 heap_5.c 448 21.4 内存管理实验 451 21.5 实验现象 455 第22章 中断管理 456 22.1 异常与中断的基本概念 456 22.1.1 中断的介绍 457 22.1.2 和中断相关的术语 457 22.2 中断管理的运作机制 458 22.3 中断延迟的概念 459 22.4 中断管理的应用场景 460 22.5 ARM Cortex-M的中断管理 460 22.6 中断管理实验 462 22.7 实验现象 470 第23章 CPU利用率统计 471 23.1 CPU利用率的基本概念 471 23.2 CPU利用率的作用 471 23.3 CPU利用率统计 472 23.4 CPU利用率统计实验 473 23.5 实验现象 478 附录 479 |