首页 > 代码库 > stm32f10x寄存器设置脚本

stm32f10x寄存器设置脚本

   1 #include "hw_config.h"   2    3 // <<< Use Configuration Wizard in Context Menu >>>     4    5 // <e> 电源控制(PWR)    6 //   <h> 电源控制寄存器 (PWR_CR)  3.4.1   7 //     <o1.8> DBP:取消后备区域的写保护    8 //       <i> 在复位后,RTC和后备寄存器处于被保护状态以防意外写入。   9 //       <i> 设置这位允许写入这些寄存器。   10 //       <i> 0:禁止写入RTC和后备寄存器   11 //       <i> 1:允许写入RTC和后备寄存器   12   13 //     <o1.5..7> PLS[2:0]:PVD电平选择   14 //      <0=> 2.2V   <1=> 2.3V  <2=> 2.4V   <3=> 2.5V  15 //      <4=> 2.6V   <5=> 2.7V  <6=> 2.8V   <7=> 2.9V  16 //       <i> 这些位用于选择电源电压监测器的电压阀值   17 //       <i> 000:2.2V   18 //       <i> 001:2.3V   19 //       <i> 010:2.4V   20 //       <i> 011:2.5V   21 //       <i> 100:2.6V   22 //       <i> 101:2.7V   23 //       <i> 110:2.8V   24 //       <i> 111:2.9V   25 //       <i> 注:详细说明参见数据手册中的电气特性部分。  26   27 //     <o1.4> PVDE:电源电压监测器(PVD)使能   28 //       <i> 0:禁止PVD   29 //       <i> 1:开启PVD  30   31 //     <o1.3> CSBF:清除待机位   32 //       <i> 始终读出为0   33 //       <i> 0:无功效   34 //       <i> 1:清除SBF待机位(写)  35   36 //     <o1.2> CWUF:清除唤醒位   37 //       <i> 始终读出为0   38 //       <i> 0:无功效   39 //       <i> 1:2个系统时钟周期后清除WUF唤醒位(写)   40   41 //     <o1.1> PDDS:掉电深睡眠   42 //       <i> 与LPDS位协同操作   43 //       <i> 0:当CPU进入深睡眠时进入停机模式,调压器的状态由LPDS位控制。   44 //       <i> 1:CPU进入深睡眠时进入待机模式。  45   46 //     <o1.0> LPDS:深睡眠下的低功耗   47 //       <i> PDDS=0时,与PDDS位协同操作   48 //       <i> 0:在停机模式下电压调压器开启   49 //       <i> 1:在停机模式下电压调压器处于低功耗模式   50   51 //   </h>   52   53   54 //   <h> 电源控制/状态寄存器 (RCC_CSR)  3.4.1   55 //     <o2.8> EWUP:使能WKUP管脚   56 //       <i> 0:WKUP管脚为通用I/O。WKUP管脚上的事件不能将CPU从待机模式唤醒   57 //       <i> 1:WKUP管脚用于将CPU从待机模式唤醒,WKUP管脚被强置为输入下拉的配  58 //       <i> 置(WKUP管脚上的上升沿将系统从待机模式唤醒)   59 //       <i> 注:在系统复位时清除这一位。   60    61 //     <o2.2> PVDO:PVD输出   62 //       <i> 当PVD被PVDE位使能后该位才有效   63 //       <i> 0:VDD高于由PLS[2:0]选定的PVD阀值   64 //       <i> 1:VDD低于由PLS[2:0]选定的PVD阀值   65 //       <i> 注:在待机模式下PVD被停止。因此,待机模式后或复位后,直到设置PVDE位之前,该位为0。  66    67 //     <o2.1> SBF:待机标志   68 //       <i> 该位由硬件设置,并只能由POR/PDR(上电/掉电复位)或设置电源控制寄存器  69 //       <i> (PWR_CR)的CSBF位清除。   70 //       <i> 0:系统不在待机模式   71 //       <i> 1:系统进入待机模式  72   73 //     <o2.0> WUF:唤醒标志   74 //       <i> 该位由硬件设置,并只能由POR/PDR(上电/掉电复位)或设置电源控制寄存器  75 //       <i> (PWR_CR)的CWUF位清除。   76 //       <i> 0:没有发生唤醒事件   77 //       <i> 1:在WKUP管脚上发生唤醒事件或出现RTC闹钟事件。   78 //       <i> 注:当WKUP管脚已经是高电平时,在(通过设置EWUP位)使能WKUP管脚时,会检测  79 //       <i> 到一个额外的事件。  80    81 //   </h>   82 // </e>  83   84 #define PWR_SETUP             1  85 #define PWR_CR_Val             0x04000083  86 #define PWR_CFGR_Val        0x00000100  87   88   89 // <e> 复位与时间控制(RCC、RST)                               90 //   <h> 时钟控制寄存器 (RCC_CR)  4.3.1  91 //     <o1.26>  PLLRDY:PLL时钟就绪标志   92 //       <i> PLL锁定后由硬件置1,   93 //       <i> 0:PLL未锁定 1:PLL锁定   94 //     <o1.25>  PLLON:PLL使能  95 //       <i> 由软件置1或清零。当进入待机和停止模式时,该位由硬件清零。   96 //       <i> 当PLL时钟被用作或被选择将要作为系统时钟时,该位不能被清零。   97 //       <i> 0:PLL关闭 1:PLL使能   98 //     <o1.19>  CSSON:时钟安全系统使能  99 //       <i> 使能时钟监测器。  100 //       <i> 0:时钟监测器关闭  101 //       <i> 1:如果外部1-25MHz时钟就绪,时钟监测器开启。 102 //     <o1.18>  HSEBYP:外部高速时钟旁路 103 //       <i> 在调试模式下由软件置1或清零来旁路外部晶体振荡器。只有在外部1- 104 //       <i> 25MHz振荡器关闭的情况下,该位才可以写入。  105 //       <i> 0:外部1-25MHz振荡器没有旁路  106 //       <i> 1:外部1-25MHz外部晶体振荡器被旁路。  107 //     <o1.17>  HSERDY:外部高速时钟就绪标志  108 //       <i> 由硬件置1来指示外部时钟已经稳定。在HSEON位清零后,该位需要 109 //       <i> 6个外部时钟周期清零。  110 //       <i> 0:外部1-25MHz时钟没有就绪  111 //       <i> 1:外部1-25MHz时钟就绪  112 //     <o1.16>  HSEON:外部高速时钟使能  113 //       <i> 由软件置1或清零。当进入待机和停止模式时,该位由硬件清零,关 114 //       <i> 闭外部时钟。当外部时钟被用作或被选择将要作为系统时钟时,该位不能被清零。  115 //       <i> 0:HSE振荡器关闭  116 //       <i> 1:HSE振荡器开启 117 //     <o1.8..15>  HSICAL[7:0]:内部高速时钟校准  <0-255> 118 //       <i> 在系统启动时,这些位被自动初始化 119 //     <o1.3..7>  HSITRIM[4:0]:内部高速时钟调整  <0-31> 120 //       <i> 由软件写入来调整内部高速时钟,它们被叠加在HSICAL[5:0]数值上。  121 //       <i> 这些位在HSICAL[7:0]的基础上,让用户可以输入一个调整数值,根 122 //       <i> 据电压和温度的变化调整内部HSI RC振荡器的频率。  123 //       <i> 默认数值为16,在TA= 25°C时这个默认的数值可以把HSI调整到 124 //       <i> 8MHz;增大HSICAL的数值则增大HSI RC振荡器的频率,反之则减 125 //       <i> 小RC振荡器的频率;每步HSICAL的变化调整约40kHz。 126 //     <o1.1>  HSIRDY:内部高速时钟就绪标志  127 //       <i> 由硬件置1来指示内部8MHz时钟已经稳定。在HSION位清零后,该位 128 //       <i> 需要6个内部时钟周期清零。  129 //       <i> 0:内部8MHz时钟没有就绪  130 //       <i> 1:内部8MHz时钟就绪 131 //     <o1.0> HSION:内部高速时钟使能  132 //       <i> 由软件置1或清零。  133 //       <i> 当从待机和停止模式返回或用作系统时钟的外部1-25MHz时钟发生故 134 //       <i> 障时,该位由硬件置1来启动内部8MHz的RC振荡器。当内部8MHz时 135 //       <i> 钟被直接或间接地用作或被选择将要作为系统时钟时,该位不能被清零。  136 //       <i> 0:内部8MHz时钟关闭  137 //       <i> 1:内部8MHz时钟开启   138 //   </h> 139 // 140 //   <h> 时钟配置寄存器 (RCC_CFGR) 4.3.2 141 //     <o2.24..26>  MCO 微控制器时钟输出   142 //       <0=> 没有时钟输出   <4=> 系统时钟输出  <5=> 内部8MHz的RC振荡器时钟输出   143 //       <6=> 外部1-25MHz振荡器时钟输出   <7=> PLL时钟2分频后输出 144 //       <i> 由软件置1或清零。  145 //       <i> 0xx: 没有时钟输出  146 //       <i> 100: 系统时钟输出 147 //       <i> 101: 内部8MHz的RC振荡器时钟输出  148 //       <i> 110: 外部1-25MHz振荡器时钟输出  149 //       <i> 111: PLL时钟2分频后输出  150 //       <i> 注意:- 该时钟输出在启动和切换MCO时钟源时可能会被截断。  151 //       <i> - 在系统时钟作为输出时钟时,请保证输出时钟频率不超过50MHz (IO口最高频率) 152 //     <o2.22>  USBPRE:USB预分频  153 //       <i> 由软件设置来产生48MHz的USB时钟。在RCC_APB1ENR寄存器中使能USB时 154 //       <i> 钟之前,必须保证该位已经有效。如果USB时钟被使能,该位可以被清零。  155 //       <i> 0:PLL时钟1.5倍分频作为USB时钟  156 //       <i> 1:PLL时钟直接作为USB时钟 157 //     <o2.18..21>  PLLMUL:PLL倍频系数  158 //       <0=> PLL 2倍频输出   <1=> PLL 3倍频输出   <2=> PLL 4倍频输出   <3=> PLL 5倍频输出 159 //       <4=> PLL 6倍频输出   <5=> PLL 7倍频输出   <6=> PLL 8倍频输出   <7=> PLL 9倍频输出 160 //       <8=> PLL 10倍频输出  <9=> PLL 11倍频输出  <10=> PLL 12倍频输出 <11=> PLL 13倍频输出 161 //       <12=> PLL 14倍频输出 <13=> PLL 15倍频输出 <14=> PLL 16倍频输出 <15=> PLL 16倍频输出 162 //       <i> 由软件设置来确定PLL倍频系数。只有在PLL关闭的情况下才可被写入。  163 //       <i> 注意:PLL的输出频率不能超过72MHz  164 //       <i> 0000:PLL 2倍频输出  165 //       <i> 0001:PLL 3倍频输出  166 //       <i> 0010:PLL 4倍频输出  167 //       <i> 0011:PLL 5倍频输出  168 //       <i> 0100:PLL 6倍频输出  169 //       <i> 0101:PLL 7倍频输出  170 //       <i> 0110:PLL 8倍频输出  171 //       <i> 0111:PLL 9倍频输出  172 //       <i> 1000:PLL 10倍频输出  173 //       <i> 1001:PLL 11倍频输出  174 //       <i> 1010:PLL 12倍频输出  175 //       <i> 1011:PLL 13倍频输出  176 //       <i> 1100:PLL 14倍频输出  177 //       <i> 1101:PLL 15倍频输出  178 //       <i> 1110:PLL 16倍频输出  179 //       <i> 1111:PLL 16倍频输出 180 //     <o2.17> PLLXTPRE:HSE分频器作为PLL输入  181 //       <i> 由软件设置来分频HSE后作为PLL输入时钟。该位只有在PLL关闭时才可以被写入。  182 //       <i> 0:HSE不分频  183 //       <i> 1:HSE 2分频  184 //     <o2.16> PLLSRC:PLL输入时钟源  185 //       <i> 由软件设置来选择PLL输入时钟源。该位只有在PLL关闭时才可以被写入。  186 //       <i> 0:HSI时钟2分频后作为PLL输入时钟  187 //       <i> 1:HSE时钟作为PLL输入时钟。 188 //     <o2.14..15> ADCPRE:ADC预分频  189 //       <i> 由软件设置来确定ADC时钟频率  190 //       <i> 00:PCLK2 2分频后作为ADC时钟  191 //       <i> 01:PCLK2 4分频后作为ADC时钟  192 //       <i> 10:PCLK2 6分频后作为ADC时钟  193 //       <i> 11:PCLK2 8分频后作为ADC时钟 194 //     <o2.11..13> PPRE2:高速APB预分频(APB2) 195 //       <0=> HCLK不分频  <4=> HCLK 2分频  <5=> HCLK 4分频  <6=> HCLK 8分频    <7=> HCLK 16分频   196 //       <i> 由软件设置来控制高速APB2预分频系数。  197 //       <i> 0xx:HCLK不分频  198 //       <i> 100:HCLK 2分频  199 //       <i> 101:HCLK 4分频  200 //       <i> 110:HCLK 8分频  201 //       <i> 111:HCLK 16分频 202 //     <o2.8..10> PPRE1:低速APB预分频(APB1)   203 //       <0=> HCLK不分频  <4=> HCLK 2分频  <5=> HCLK 4分频  <6=> HCLK 8分频    <7=> HCLK 16分频   204 //       <i> 由软件设置来控制低速APB1预分频系数。软件必须保证APB1时钟频率不超过36MHz。  205 //       <i> 0xx:HCLK不分频  206 //       <i> 100:HCLK 2分频  207 //       <i> 101:HCLK 4分频  208 //       <i> 110:HCLK 8分频  209 //       <i> 111:HCLK 16分频 210 //     <o2.4..7> HPRE: AHB预分频  211 //       <0=> SYSCLK不分频  <8=> SYSCLK 2分频  <9=> SYSCLK 4分频  <10=> SYSCLK 8分频  <11=> SYSCLK 16分频 212 //       <12=> SYSCLK 64分频  <13=> SYSCLK 128分频  <14=> SYSCLK 256分频  <15=> SYSCLK 512分频   213 //       <i> 由软件设置来控制AHB预分频系数。  214 //       <i> 0xxx:SYSCLK不分频  215 //       <i> 1000:SYSCLK 2分频  216 //       <i> 1001:SYSCLK 4分频  217 //       <i> 1010:SYSCLK 8分频  218 //       <i> 1011:SYSCLK 16分频  219 //       <i> 1100:SYSCLK 64分频  220 //       <i> 1101:SYSCLK 128分频  221 //       <i> 1110:SYSCLK 256分频  222 //       <i> 1111:SYSCLK 512分频  223 //       <i> 注意:当AHB时钟的预分频系数大于1时,必须保持预取缓冲器开启。详见读闪存存储器一节。 224 //     <o2.2..3> SWS:系统时钟切换状态  225 //       <0=> HSI作为系统时钟  <1=> HSE作为系统时钟  <2=> PLL输出作为系统时钟  <3=> 不可用   226 //       <i> 由硬件置1和清零来指示哪一个时钟源被作为系统时钟。  227 //       <i> 00:HSI作为系统时钟  228 //       <i> 01:HSE作为系统时钟  229 //       <i> 10:PLL输出作为系统时钟  230 //       <i> 11:不可用 231 //     <o2.0..1> SW:系统时钟切换  232 //       <0=> HSI作为系统时钟  <1=> HSE作为系统时钟  <2=> PLL输出作为系统时钟  <3=> 不可用   233 //       <i> 由软件设置来选择系统时钟源。  234 //       <i> 在从停止或待机模式中返回时或直接或间接作为系统时钟的HSE出现故障时,由 235 //       <i> 硬件强制选择HSI作为系统时钟(如果时钟安全系统已经启动)  236 //       <i> 00:HSI作为系统时钟  237 //       <i> 01:HSE作为系统时钟  238 //       <i> 10:PLL输出作为系统时钟  239 //       <i> 11:不可用 240 //   </h> 241 //   <h> 时钟中断寄存器 (RCC_CIR) 4.3.3  242 //     <o3.23>  CSSC:时钟安全系统中断清除  243 //       <i> 由软件置1来清除CSSF安全系统中断标志位CSSF。  244 //       <i> 在清除操作完成后,该位由硬件复位。  245 //       <i> 0: CSSF安全系统中断标志位未清零  246 //       <i> 1: CSSF安全系统中断标志位清零 247 // 248 //     <o3.20> PLLRDYC:PLL就绪中断清除  249 //       <i> 由软件置1来清零PLL就绪中断标志位PLLRDYF。  250 //       <i> 在清除操作完成后,该位由硬件复位。  251 //       <i> 0: PLL就绪中断标志位PLLRDYF未清零  252 //       <i> 1: PLL就绪中断标志位PLLRDYF清零 253 // 254 //     <o3.19> HSERDYC:HSE就绪中断清除  255 //       <i> 由软件置1来清零HSE就绪中断标志位HSERDYF。  256 //       <i> 在清除操作完成后,该位由硬件复位。  257 //       <i> 0: HSE就绪中断标志位HSERDYF未清零  258 //       <i> 1: HSE就绪中断标志位HSERDYF清零  259 // 260 //     <o3.18> HSIRDYC HSI就绪中断清除  261 //       <i> 由软件置1来清零HSI就绪中断标志位HSIRDYF。  262 //       <i> 在清除操作完成后,该位由硬件复位。  263 //       <i> 0: HSI就绪中断标志位HSIRDYF未清零  264 //       <i> 1: HSI就绪中断标志位HSIRDYF清零 265 // 266 //     <o3.17> LSERDYC:LSE就绪中断清除  267 //       <i> 由软件置1来清零LSE就绪中断标志位LSERDYF。  268 //       <i> 在清除操作完成后,该位由硬件复位。  269 //       <i> 0: LSE就绪中断标志位LSERDYF未清零  270 //       <i> 1: LSE就绪中断标志位LSERDYF清零 271 // 272 //     <o3.16> LSIRDYC:LSI就绪中断清除  273 //       <i> 由软件置1来清零LSI就绪中断标志位LSIRDYF。  274 //       <i> 在清除操作完成后,该位由硬件复位。 275 //       <i> 0: LSI就绪中断标志位LSIRDYF未清零  276 //       <i> 1: LSI就绪中断标志位LSIRDYF清零 277 // 278 //     <o3.12> PLLRDYIE:PLL就绪中断使能  279 //       <i> 由软件置1或清零来使能或关闭PLL就绪中断  280 //       <i> 0:PLL就绪中断关闭  281 //       <i> 1:PLL就绪中断使能  282 // 283 //     <o3.11> HSERDYIE:HSE就绪中断使能  284 //       <i> 由软件置1或清零来使能或关闭外部1-25MHz振荡器就绪中断  285 //       <i> 0:HSE就绪中断关闭  286 //       <i> 1:HSE就绪中断使能 287 // 288 //     <o3.10> HSIRDYIE:HSI就绪中断使能  289 //       <i> 由软件置1或清零来使能或关闭内部8MHz RC振荡器就绪中断  290 //       <i> 0:HSI就绪中断关闭  291 //       <i> 1:HSI就绪中断使能  292 // 293 //     <o3.9> LSERDYIE:LSE就绪中断使能  294 //       <i> 由软件置1或清零来使能或关闭外部40kHz RC振荡器就绪中断  295 //       <i> 0:LSE就绪中断关闭  296 //       <i> 1:LSE就绪中断使能 297 // 298 //     <o3.8> LSIRDYIE:LSI就绪中断使能  299 //       <i> 由软件置1或清零来使能或关闭内部40kHz RC振荡器就绪中断  300 //       <i> 0:LSI就绪中断关闭  301 //       <i> 1:LSI就绪中断使能 302 // 303 //     <o3.7> CSSF:时钟安全系统中断标志  304 //       <i> 由软件通过置1 CSSC位来清零  305 //       <i> 在外部1-25MHz振荡器时钟出现故障时,由硬件置1  306 //       <i> 0:无HSE时钟失效安全系统中断  307 //       <i> 1:产生HSE时钟失效安全系统中断 308 // 309 //     <o3.4> PLLRDYF:PLL就绪中断标志  310 //       <i> 由软件通过置1 PLLRDYC位来清零  311 //       <i> 在PLL就绪且PLLRDYIE位被置1时,由硬件置1  312 //       <i> 0:无PLL就绪中断  313 //       <i> 1:产生PLL就绪中断 314 // 315 //     <o3.3> HSERDYF:HSE就绪中断标志  316 //       <i> 由软件通过置1 HSERDYC位来清零  317 //       <i> 在外部低速时钟就绪且HSERDYIE位被置1时,由硬件置1  318 //       <i> 0:无外部1-25MHz振荡器就绪中断  319 //       <i> 1:产生外部1-25MHz振荡器就绪中断 320 // 321 //     <o3.2> HSIRDYF:HSI就绪中断标志  322 //       <i> 由软件通过置1 HSIRDYC位来清零  323 //       <i> 在内部高速时钟就绪且HSIRDYIE位被置1时,由硬件置1  324 //       <i> 0:无内部8MHz RC振荡器就绪中断  325 //       <i> 1:产生内部8MHz RC振荡器就绪中断 326 // 327 //     <o3.1> LSERDYF:LSE就绪中断标志  328 //       <i> 由软件通过置1 LSERDYC位来清零  329 //       <i> 在外部低速时钟就绪且LSERDYIE位被置1时,由硬件置1  330 //       <i> 0:无外部32kHz振荡器就绪中断  331 //       <i> 1:产生外部32kHz振荡器就绪中断 332 // 333 //     <o3.0> LSIRDYF:LSI就绪中断标志  334 //       <i> 由软件通过置1 LSIRDYC位来清零  335 //       <i> 在内部低速时钟就绪且LSIRDYIE位被置1时,由硬件置1  336 //       <i> 0:无内部40kHz RC振荡器就绪中断  337 //       <i> 1:产生内部40kHz RC振荡器就绪中断 338 // 339 // 340 //   </h> 341 //   <h> APB2外设复位寄存器 (RCC_APB2RSTR)  4.3.4  342 //     <o4.14> USART1RST:USART1复位  343 //       <i> 由软件置1或清零  344 //       <i> 0:无效  345 //       <i> 1:复位USART1 346 // 347 //     <o4.12> SPI1RST:SPI1复位  348 //       <i> 由软件置1或清零  349 //       <i> 0:无效  350 //       <i> 1:复位SPI1 351 // 352 //     <o4.11> TIM1RST:TIM1复位  353 //       <i> 由软件置1或清零  354 //       <i> 0:无效  355 //       <i> 1:复位TIM1 356 // 357 //     <o4.10> ADC2RST:ADC2复位  358 //       <i> 由软件置1或清零  359 //       <i> 0:无效  360 //       <i> 1:复位ADC2 361 // 362 //     <o4.9> ADC1RST:ADC1复位  363 //       <i> 由软件置1或清零  364 //       <i> 0:无效  365 //       <i> 1:复位ADC1  366 // 367 //     <o4.6> IOPERST:IO口E复位  368 //       <i> 由软件置1或清零  369 //       <i> 0:无效  370 //       <i> 1:复位IO口E 371 // 372 //     <o4.5> IOPDRST:IO口D复位  373 //       <i> 由软件置1或清零  374 //       <i> 0:无效  375 //       <i> 1:复位IO口D 376 // 377 //     <o4.4> IOPCRST:IO口C复位  378 //       <i> 由软件置1或清零  379 //       <i> 0:无效  380 //       <i> 1:复位IO口C 381 // 382 //     <o4.3> IOPBRST:IO口B复位  383 //       <i> 由软件置1或清零  384 //       <i> 0:无效  385 //       <i> 1:复位IO口B 386 // 387 //     <o4.2> IOPARST:IO口A复位  388 //       <i> 由软件置1或清零  389 //       <i> 0:无效  390 //       <i> 1:复位IO口A 391 // 392 //     <o4.0> AFIORST:辅助功能IO复位  393 //       <i> 由软件置1或清零  394 //       <i> 0:无效  395 //       <i> 1:复位辅助功能 396 // 397 //   </h> 398 // 399 // 400 //   <h> APB1外设复位寄存器 (RCC_APB1RSTR) 4.3.5 401 //     <o5.28> PWRRST:电源复位  402 //       <i> 由软件置1或清零  403 //       <i> 0:无效  404 //       <i> 1:复位电源电路 405 // 406 //     <o5.27> BKPRST:备份复位  407 //       <i> 由软件置1或清零  408 //       <i> 0:无效  409 //       <i> 1:复位备份电路 410 // 411 //     <o5.25> CANRST:CAN复位  412 //       <i> 由软件置1或清零  413 //       <i> 0:无效  414 //       <i> 1:复位CAN 415 // 416 //     <o5.23> USBRST:USB复位  417 //       <i> 由软件置1或清零  418 //       <i> 0:无效  419 //       <i> 1:复位USB 420 // 421 //     <o5.22> I2C2RST:I2C 2复位  422 //       <i> 由软件置1或清零  423 //       <i> 0:无效  424 //       <i> 1:复位I2C 2 425 // 426 //     <o5.21> I2C1RST:I2C 1复位  427 //       <i> 由软件置1或清零  428 //       <i> 0:无效  429 //       <i> 1:复位I2C 1 430 // 431 //     <o5.18> USART3RST:USART3复位 432 //       <i> 由软件置1或清零  433 //       <i> 0:无效  434 //       <i> 1:复位USART3 435 // 436 //     <o5.17> USART2RST:USART2复位 437 //       <i> 由软件置1或清零  438 //       <i> 0:无效  439 //       <i> 1:复位USART2 440 // 441 //     <o5.11> WWDGRST:窗口看门狗复位  442 //       <i> 由软件置1或清零  443 //       <i> 0:无效  444 //       <i> 1:复位窗口看门狗 445 // 446 //     <o5.2> TIM4RST:定时器4复位  447 //       <i> 由软件置1或清零  448 //       <i> 0:无效  449 //       <i> 1:复位定时器4 450 // 451 //     <o5.1> TIM3RST:定时器3复位  452 //       <i> 由软件置1或清零  453 //       <i> 0:无效  454 //       <i> 1:复位定时器3 455 // 456 //     <o5.0> TIM2RST:定时器2复位  457 //       <i> 由软件置1或清零  458 //       <i> 0:无效  459 //       <i> 1:复位定时器2 460 // 461 //   </h> 462 // 463 // 464 //   <h> AHB外设时钟使能寄存器 (RCC_AHBENR) 4.3.6 465 //     <o6.4> FLITFEN:闪存接口电路时钟使能  466 //       <i> 由软件来置1或清零来开启或关闭睡眠模式时闪存接口电路时钟。  467 //       <i> 0:睡眠模式时闪存接口电路时钟关闭  468 //       <i> 1:睡眠模式时闪存接口电路时钟开启 469 // 470 //     <o6.2> SRAMEN:SRAM时钟使能  471 //       <i> 由软件来置1或清零来开启或关闭睡眠模式时SRAM时钟。  472 //       <i> 0:睡眠模式时SRAM时钟关闭  473 //       <i> 1:睡眠模式时SRAM时钟开启 474 // 475 //     <o6.0> DMAEN:DMA时钟使能  476 //       <i> 由软件来置1或清零来开启或关闭DMA时钟。  477 //       <i> 0:DMA时钟关闭  478 //       <i> 1:DMA时钟开启 479 // 480 //   </h> 481 //   <h> APB2外设时钟使能寄存器(RCC_APB2ENR) 4.3.7  482 //     <o7.14> USART1EN:USART1时钟使能  483 //       <i> 由软件来置1或清零  484 //       <i> 0:USART1时钟关闭  485 //       <i> 1:USART1时钟开启  486 // 487 //     <o7.12> SPI1EN:SPI1时钟使能  488 //       <i> 由软件来置1或清零  489 //       <i> 0:SPI1时钟关闭  490 //       <i> 1:SPI1时钟开启  491 // 492 //     <o7.11> TIM1EN:TIM1时钟使能  493 //       <i> 由软件来置1或清零  494 //       <i> 0:TIM1时钟关闭  495 //       <i> 1:TIM1时钟开启 496 // 497 //     <o7.10> ADC2EN:ADC2时钟使能  498 //       <i> 由软件来置1或清零  499 //       <i> 0:ADC2时钟关闭  500 //       <i> 1:ADC2时钟开启 501 // 502 //     <o7.9> ADC1EN:ADC1时钟使能  503 //       <i> 由软件来置1或清零  504 //       <i> 0:ADC1时钟关闭  505 //       <i> 1:ADC1时钟开启 506 // 507 //     <o7.6> IOPEEN:IO口E时钟使能  508 //       <i> 由软件来置1或清零  509 //       <i> 0:IO口E时钟关闭  510 //       <i> 1:IO口E时钟开启 511 // 512 //     <o7.5> IOPDEN:IO口D时钟使能  513 //       <i> 由软件来置1或清零  514 //       <i> 0:IO口D时钟关闭  515 //       <i> 1:IO口D时钟开启 516 //  517 //     <o7.4> IOPCEN:IO口C时钟使能  518 //       <i> 由软件来置1或清零  519 //       <i> 0:IO口C时钟关闭  520 //       <i> 1:IO口C时钟开启 521 // 522 //     <o7.3> IOPBEN:IO口B时钟使能  523 //       <i> 由软件来置1或清零  524 //       <i> 0:IO口B时钟关闭  525 //       <i> 1:IO口B时钟开启 526 // 527 //     <o7.2> IOPAEN:IO口A时钟使能  528 //       <i> 由软件来置1或清零  529 //       <i> 0:IO口A时钟关闭  530 //       <i> 1:IO口A时钟开启 531 // 532 //     <o7.0> AFIOEN:辅助功能IO时钟使能  533 //       <i> 由软件来置1或清零  534 //       <i> 0:辅助功能IO时钟关闭  535 //       <i> 1:辅助功能IO时钟开启 536 // 537 //   </h> 538 //   <h> APB1外设时钟使能寄存器(RCC_APB1ENR) 4.3.8 539 //     <o8.28> PWREN:电源时钟使能  540 //       <i> 由软件来置1或清零  541 //       <i> 0:电源时钟关闭  542 //       <i> 1:电源时钟开启 543 // 544 //     <o8.27> BKPEN:备份时钟使能  545 //       <i> 由软件来置1或清零  546 //       <i> 0:备份时钟关闭  547 //       <i> 1:备份时钟开启 548 // 549 //     <o8.25> CANEN:CAN时钟使能  550 //       <i> 由软件来置1或清零  551 //       <i> 0:CAN时钟关闭  552 //       <i> 1:CAN时钟开启 553 // 554 //     <o8.23> USBEN:USB时钟使能  555 //       <i> 由软件来置1或清零  556 //       <i> 0:USB时钟关闭  557 //       <i> 1:USB时钟开启 558 // 559 //     <o8.22> I2C2EN:I2C 2时钟使能  560 //       <i> 由软件来置1或清零  561 //       <i> 0:I2C 2时钟关闭  562 //       <i> 1:I2C 2时钟开启 563 // 564 //     <o8.21> I2C1EN:I2C 1时钟使能  565 //       <i> 由软件来置1或清零  566 //       <i> 0:I2C 1时钟关闭  567 //       <i> 1:I2C 1时钟开启 568 // 569 //     <o8.18> USART3EN:USART 3时钟使能  570 //       <i> 由软件来置1或清零  571 //       <i> 0:USART 3时钟关闭  572 //       <i> 1:USART 3时钟开启 573 // 574 //     <o8.17> USART2EN:USART 2时钟使能  575 //       <i> 由软件来置1或清零  576 //       <i> 0:USART 2时钟关闭  577 //       <i> 1:USART 2时钟开启 578 // 579 //     <o8.14> SPI2EN:SPI 2时钟使能  580 //       <i> 由软件来置1或清零  581 //       <i> 0:SPI 2时钟关闭  582 //       <i> 1:SPI 2时钟开启 583 // 584 //     <o8.11> WWDGEN:窗口看门狗时钟使能  585 //       <i> 由软件来置1或清零  586 //       <i> 0:窗口看门狗时钟关闭  587 //       <i> 1:窗口看门狗时钟开启 588 // 589 //     <o8.2> TIM4EN:定时器4时钟使能  590 //       <i> 由软件来置1或清零  591 //       <i> 0:定时器4时钟关闭  592 //       <i> 1:定时器4时钟开启 593 // 594 //     <o8.1> TIM3EN:定时器3时钟使能  595 //       <i> 由软件来置1或清零  596 //       <i> 0:定时器3时钟关闭  597 //       <i> 1:定时器3时钟开启 598 // 599 //     <o8.0> TIM2EN:定时器2时钟使能  600 //       <i> 由软件来置1或清零  601 //       <i> 0:定时器2时钟关闭  602 //       <i> 1:定时器2时钟开启 603 // 604 //   </h> 605 // 606 // 607 //   <h> 备份域控制寄存器 (RCC_BDCR) 4.3.9 608 //       <i> 备份域控制寄存器中(RCC_BDCR)的LSEON、LSEBYP、RTCSEL和 609 //       <i> RTCEN位处于备份域。由此,这些位在复位后被写保护,只有在电源控制寄存器 610 //       <i> (PWR_CR)中的DBP位置 1之后才能对这些位进行改动。  611 // 612 //     <o9.16> BDRST:备份域软件复位  613 //       <i> 由软件置1或清零  614 //       <i> 0:复位未激活  615 //       <i> 1:复位整个备份域  616 // 617 //     <o9.15> RTCEN:RTC时钟使能  618 //       <i> 由软件置1或清零  619 //       <i> 0:RTC时钟关闭  620 //       <i> 1:RTC时钟开启 621 // 622 //     <o9.8..9> RTCSEL[1:0]:RTC时钟源选择  623 //       <0=> 无时钟   <1=> LSE振荡器作为RTC时钟  <2=> LSI振荡器作为RTC时钟   624 //       <3=> HSE振荡器在128分频后作为RTC时钟  625 //       <i> 由软件设置来选择RTC时钟源。一旦RTC时钟源被选定,直到下次后备域被复位,它不能在 626 //       <i> 被改变。可通过设置BDRST位来清除。  627 //       <i> 00:无时钟  628 //       <i> 01:LSE振荡器作为RTC时钟  629 //       <i> 10:LSI振荡器作为RTC时钟  630 //       <i> 11:HSE振荡器在128分频后作为RTC时钟 631 // 632 //     <o9.2> LSEBYP:外部低速时钟振荡器旁路  633 //       <i> 在调试模式下由软件置1或清零来旁路LSE。只有在外部32kHz振荡器关闭时,才能写入该位  634 //       <i> 0:LSE时钟未被旁路  635 //       <i> 1:LSE时钟被旁路 636 // 637 //     <o9.1> LSERDY:外部低速LSE就绪  638 //       <i> 由硬件置1或清零来指示是否外部32kHz振荡器就绪。在LSEON被清零后,该位需要6个外 639 //       <i> 部低速振荡器的周期才被清零。  640 //       <i> 0:外部32kHz振荡器未就绪  641 //       <i> 1:外部32kHz振荡器就绪 642 // 643 //     <o9.1> LSEON:外部低速振荡器使能  644 //       <i> 由软件置1或清零。  645 //       <i> 0:外部32kHz振荡器关闭  646 //       <i> 1:外部32kHz振荡器开启 647 // 648 //   </h> 649 // 650 // 651 //   <h> 控制/状态寄存器 (RCC_CSR) 4.3.10 652 //     <o10.31> LPWRRSTF:低功耗复位标志  653 //       <i> 由软件通过写RMVF位清零,在低功耗管理复位发生时由硬件置1。  654 //       <i> 0:无低功耗管理复位发生  655 //       <i> 1:发生低功耗管理复位  656 //       <i> 关于低低功耗管理复位的进一步信息,请参考低功耗管理复位章节。 657 // 658 //     <o10.30> WWDGRSTF:窗口看门狗复位标志 659 //       <i> 由软件通过写RMVF位清零,在窗口看门狗复位发生时由硬件置1。  660 //       <i> 0:无窗口看门狗复位发生  661 //       <i> 1:发生窗口看门狗复位  662 // 663 //     <o10.29> IWDGRSTF:独立看门狗复位标志  664 //       <i> 由软件通过写RMVF位清零,在独立看门狗复位发生时由硬件置1。  665 //       <i> 0:无独立看门狗复位发生  666 //       <i> 1:发生独立看门狗复位 667 // 668 //     <o10.28> SFTRSTF:软件复位标志  669 //       <i> 由软件通过写RMVF位清零,在软件复位发生时由硬件置1。  670 //       <i> 0:无软件复位发生  671 //       <i> 1:发生软件复位 672 // 673 //     <o10.27> PORRSTF:上电/掉电复位标志  674 //       <i> 由软件通过写RMVF位清零,在上电/掉电复位发生时由硬件置1。  675 //       <i> 0:无上电/掉电复位发生  676 //       <i> 1:发生上电/掉电复位  677 // 678 //     <o10.26> PINRSTF:NRST管脚复位标志  679 //       <i> 由软件通过写RMVF位清零,在NRST管脚复位发生时由硬件置1。  680 //       <i> 0:无NRST管脚复位发生  681 //       <i> 1:发生NRST管脚复位 682 // 683 //     <o10.24> RMVF 清除复位标志  684 //       <i> 由软件置1或清零来清除复位标志。  685 //       <i> 0:保持复位标志  686 //       <i> 1:清零复位标志 687 // 688 //     <o10.1> LSIRDY:内部低速时钟就绪  689 //       <i> 由硬件置1或清零来指示内部40kHz RC振荡器是否就绪。在LSION清零后,3个 690 //       <i> 内部40kHz RC振荡器的周期后LSIRDY被清零。  691 //       <i> 0:LSI(内部40kHz RC振荡器)时钟未就绪  692 //       <i> 1:LSI(内部40kHz RC振荡器)时钟就绪 693 // 694 //     <o10.0> LSION:内部低速振荡器使能  695 //       <i> 由软件置1或清零。  696 //       <i> 0:内部40kHz RC振荡器关闭  697 //       <i> 1:内部40kHz RC振荡器开启 698 // 699 //   </h> 700 // </e>   701  702 #define RCC_SETUP             1 703 #define RCC_CR_Val             0x00000083 704 #define RCC_CFGR_Val        0x00000000 705 #define RCC_CIR_Val           0x00000000 706 #define RCC_APB2RSTR_Val    0x00000000 707 #define RCC_APB1RSTR_Val      0x00000000 708 #define RCC_AHBENR_Val      0x00000000 709 #define RCC_APB2ENR_Val     0x00000000 710 #define RCC_APB1ENR_Val     0x00000000 711 #define RCC_BDCR_Val           0x00000000 712 #define RCC_CSR_Val         0x0C000000 713   714   715 // <e> USART通用同步异步收发器(USART)  716 //   <h> 状态寄存器(USART_SR)   19.5.1 717 //     <o1.9> CTS: CTS 标志  718 //       <i> 如果CTSE位置位,当nCTS输入变化状态时,该位被硬件置高。由软件将其清零。如果 719 //       <i> USART_CR3中的CTSIE为一,产生中断  720 //       <i> 0:nCTS状态线上没有变化  721 //       <i> 1:nCTS状态线上发生变化 722 // 723 //     <o1.8> LBD: LIN break检测标志(状态标志)  724 //       <i> 0:没有检测到LIN break  725 //       <i> 1:检测到LIN break  726 //       <i> 注意:若LBDIE=1,当LBD为1时要产生中断 727 // 728 //     <o1.7> TXE:发送数据寄存器空  729 //       <i> 当TDR寄存器中的数据被硬件转移到移位寄存器的时候,该位被硬件置位。如果 730 //       <i> USART_CR1寄存器中的TXEIE为1,则产生中断。对USART_DR的写操作,将该位清零。 731 //       <i> 0:数据还没有被转移到移位寄存器  732 //       <i> 1:数据已经被转移到移位寄存器  733 //       <i> 注意:单缓冲器传输中使用该位 734 // 735 //     <o1.6> TC: 发送完成  736 //       <i> 当包含有数据的一帧发送完成后,由硬件将该位置位。如果USART_CR1中的TCIE为1,产 737 //       <i> 生中断。由软件序列清除该位(先对USART_SR进行读操作,然后对USART_DR进行写操作)  738 //       <i> 0:发送还未完成  739 //       <i> 1:发送完成成 740  741 //     <o1.5> RXNE:读数据寄存器非空  742 //       <i> 当RDR移位寄存器中的数据被转移到USART_DR寄存器中,该位被硬件置位。如果 743 //       <i> USART_CR1寄存器中的RXNEIE为1,中断产生。对USART_DR的读操作可以将改位清零。  744 //       <i> 0:数据没有收到  745 //       <i> 1:收到数据,可以读出 746 // 747 //     <o1.4> IDLE:监测到IDLE总线  748 //       <i> 当检测到空闲总线时,该位被硬件置位。如果USART_CR1中的IDLEIE为1,产生中断。由 749 //       <i> 软件序列清除该位(先读USART_SR,然后读USART_DR)  750 //       <i> 0:没有检测到空闲总线  751 //       <i> 1:检测到空闲总线  752 //       <i> 注意:IDLE位不会再次被置高直到RXNE位被置起(即又检测到一次空闲总线) 753 // 754 //     <o1.3> ORE:过载错误  755 //       <i> 当RXNE还是1的时候,当前被接收在移位寄存器中的数据要往RDR寄存器中传送时,硬件 756 //       <i> 将该位置位。如果USART_CR1中的RXNEIE为1的话,产生中断。由软件序列将其清零(先读USART_SR,然后读USART_CR)  757 //       <i> 0:没有过载错误  758 //       <i> 1:检测到过载错误  759 //       <i> 注意:该位被置位时,RDR寄存器中的值不会丢失,但是移位寄存器中的数据会被覆盖。 760 //       <i> 如果EIE位被设置,在多缓冲器通信模式下,ORE标志置位会产生中断的。  761 // 762 //     <o1.2> NE: 噪声错误标志  763 //       <i> 在接收到的帧检测到噪音时,由硬件对该位置位。由软件序列对其清玲(先读USART_SR,再读USART_DR)  764 //       <i> 0:没有检测到噪声  765 //       <i> 1:检测到噪声  766 //       <i> 注意:该位不会产生中断,因为它和RXNE一起出现,后者自己会在RXNE标志置位时产生 767 //       <i> 中断,如果EIE位被设置,并且工作在多缓冲区通信模式下 768 // 769 //     <o1.1> FE: 帧错误  770 //       <i> 当检测到同步错位,过多的噪声或者检测到break符,该位被硬件置位。由软件序列将其清 771 //       <i> 零(先读USART_SR,再读USART_DR)  772 //       <i> 0:没有检测到帧错误  773 //       <i> 1:检测到帧错误或者break符  774 //       <i> 注意:该位不会产生中断,因为它和RXNE一起出现,后者自己会在RXNE标志置位时产生 775 //       <i> 中断。如果当前传输的数据既产生了帧错误,又产生了过载错误,还是会继续该数据的传 776 //       <i> 输,并且只有ORE位会被置位。  777 //       <i> 如果EIE位被置位,在多缓冲区通信模式下,随着FE标志被置位,中断产生。 778 // 779 //     <o1.0> PE: 校验错误  780 //       <i> 在接收模式下,如果出现校验错误,硬件对该位置位。由软件序列对其清零(依次读 781 //       <i> USART_SR和USART_DR)。如果USART_CR1中的PEIE为1,产生中断。  782 //       <i> 0:没有校验错误 783 // 784 //   </h> 785 // 786 // 787 //   <h> 数据寄存器(USART_DR)   19.5.2 788 //     <o2.0..8> DR[8:0]:数据值  789 //       <i> 包含了发送或接收的数据。由于它是由两个寄存器组成的,一个给发送用(TDR),一个给 790 //       <i> 接收用(RDR),该寄存器兼具读和写的功能。TDR寄存器提供了内部总线和输出移位寄 791 //       <i> 存器之间的并行接口(参见图1)。RDR寄存器提供了输入移位寄存器和内部总线之间的并行接口。  792 //       <i> 当使能校验位(USART_CR1种PCE位被置位)进行发送时,写到MSB的值(根据数据的 793 //       <i> 长度不同,MSB是第7位或者第8位)会被后来的校验位该取代。  794 //       <i> 当使能校验位进行接收时,读到的MSB位是接收到的校验位。  795 // 796 //   </h> 797 // 798 // 799 //   <h> 波特比率寄存器(USART_BRR)   19.5.3 800 //     <o3.4..15> DIV_Mantissa[11:0]:USARTDIV的小数部分  801 //       <i> 这12位定义了USART分频器除法因子(USARTDIV)的小数部分 802 //     <o3.0..3> DIV_Fraction[3:0]:USARTDIV的整数部分  803 //       <i> 这4位定义了USART分频器除法因子(USARTDIV)的整数部分  804 //   </h> 805  806  807 //   <h> 控制寄存器1 (USART_CR1)    19.5.4 808 //     <o4.13> UE: USART使能  809 //       <i> 当该位被清零,USART的分频器和输出在当前字节传输完成后停止工作,以减少功耗。该 810 //       <i> 位的置起和清零,是由软件操作的。  811 //       <i> 0:USART分频器和输出被禁止  812 //       <i> 1:USART模块使能 813 // 814 //     <o4.12> M: 字长  815 //       <i> 该位定义了数据字的长度,由软件对其置位和清零操作  816 //       <i> 0:一个起始位,8个数据位,n个停止位  817 //       <i> 1:一个起始位,9个数据位,一个停止位  818 //       <i> 注意:在数据传输过程中(发送或者接收时),不能修改这个位 819  820 //     <o4.11> WAKE: 唤醒的方法  821 //       <i> 这位决定了把USART唤醒的方法,由软件对该位置位或者清零。  822 //       <i> 0:被空闲总线唤醒  823 //       <i> 1:被地址标记唤醒 824 // 825 //     <o4.10> PCE: 检验控制使能  826 //       <i> 用该位来选择是否进行硬件校验控制(对于发送来说就是校验位的产生;对于接收来说就是 827 //       <i> 校验位的检测)。当使能了该位,在发送数据的MSB(如果M=1,MSB就是第9位;如果 828 //       <i> M=0,MSB就是第8位)插入校验位;对接收到的数据检查其校验位。软件对它置位或者清 829 //       <i> 零。一旦该位被置位,当前字节传输完成后,校验控制才生效。  830 //       <i> 0:校验控制被禁止  831 //       <i> 1:校验控制被使能  832 // 833 //     <o4.9> PS: 校验选择  834 //       <i> 该位用来选择当校验控制使能后,是采用偶校验还是奇校验。软件对它置位或者清零。当前 835 //       <i> 字节传输完成后,该选择生效  836 //       <i> 0:偶校验  837 //       <i> 1:奇校验 838  839 //     <o4.8> PEIE: PE中断使能  840 //       <i> 软件对该位置位或者清零  841 //       <i> 0:中断被禁止  842 //       <i> 1:当USART_SR中的PE为1时,产生USART中断 843  844 //     <o4.7> TXEIE: 发送缓冲区空中断使能  845 //       <i> 软件对该位置位或者清零  846 //       <i> 0:中断被禁止  847 //       <i> 1:当USART_SR中的TXE为1时,产生USART中断 848  849 //     <o4.6> TCIE: 发送完成中断使能  850 //       <i> 软件对该位置位或者清零  851 //       <i> 0:中断被禁止  852 //       <i> 1:当USART_SR中的TC为1时,产生USART中断 853  854 //     <o4.5> RXNEIE: 接收缓冲区非空中断使能  855 //       <i> 软件对该位置位或者清零  856 //       <i> 0:中断被禁止  857 //       <i> 1:当USART_SR中的ORE或者RXNE为1时,产生USART中断  858  859 //     <o4.4> IDLEIE: IDLE中断使能  860 //       <i> 软件对该位置位或者清零  861 //       <i> 0:中断被禁止  862 //       <i> 1:当USART_SR中的IDLE为1时,产生USART中断 863  864 //     <o4.3> TE: 发送使能  865 //       <i> 该位使能发送器。软件对该位置位或者清零  866 //       <i> 0:发送被禁止  867 //       <i> 1:发送被使能  868 //       <i> 注意:  869 //       <i> 在数据传输过程中,除了在智能卡模式下,如果TE位上有个0脉冲(即“0”之后来一个 870 //       <i> “1”),会在当前数据字传输完成后,发送一个“预备状态”(空闲总线)  871 //       <i> 当TE被设置后,在真正发送开始之前,有一个比特时间的延迟。 872  873 //     <o4.2> RE: 接收使能  874 //       <i> 软件对该位置位或者清零  875 //       <i> 0:接收被禁止  876 //       <i> 1:接收被使能,开始搜寻RX引脚上的起始位。 877 // 878 //     <o4.1> RWU: 接收唤醒  879 //       <i> 该位用来决定是否把USART置于静默模式。软件对该位置位或者清零。当唤醒序列到来 880 //       <i> 时,硬件也会将其清零。  881 //       <i> 0:接收器处于正常工作模式  882 //       <i> 1:接收器处于静默模式  883 //       <i> 注意:  884 //       <i> 在把USART置于静默模式(设置RWU位)之前,USART要已经先接收了一个数据字节。否则 885 //       <i> 在静默模式下,不能被空闲总线检测唤醒。  886 //       <i> 当配置成地址标记检测唤醒(WAKE位为1),在RXNE位被置位时,不能用软件来修改RWU位。 887 // 888 //     <o4.0> SBK: 发送断开帧  889 //       <i> 使用该位来发送断开字符。软件可以对该位置位或者清零。应该由软件来置位它,然后在断 890 //       <i> 开帧的停止位时,由硬件将该位复位。  891 //       <i> 0:没有发送断开字符  892 //       <i> 1:将要发送断开字符  893 // 894 //   </h>  895 // 896 // 897 //   <h> 控制寄存器2(USART_CR2) 19.5.5  898 //     <o5.14> LINEN: LIN模式使能  899 //       <i> 软件对该位置位或者清零。  900 //       <i> 0:LIN模式被禁止  901 //       <i> 1:LIN模式被使能  902 //       <i> LIN模式可以用USART_CR1寄存器中的SBK位发送LIN同步breaks,以及检测LIN同步break 903 // 904 //     <o5.12..13> STOP: 停止位  905 //      <0=> 1个停止位   <1=> 0.5个停止位  <2=> 2个停止位  <3=> 1.5个停止位 906 //       <i> 用来设置停止位的位数  907 //       <i> 00:1个停止位  908 //       <i> 01:0.5个停止位  909 //       <i> 10:2个停止位  910 //       <i> 11:1.5个停止位 911 // 912 //     <o5.11> CLKEN: 时钟使能  913 //       <i> 该位用来使能SCLK引脚  914 //       <i> 0:SCLK引脚被禁止  915 //       <i> 1:SCLK引脚被使能 916 // 917 //     <o5.10> CPOL: 时钟极性  918 //       <i> 用户可以用该位来选择同步模式下SLCK引脚上时钟输出的极性。和CPHA位一起配合来产 919 //       <i> 生用户希望的时钟/数据的采样关系  920 //       <i> 0:总线空闲时SCLK引脚上保持低电平  921 //       <i> 1:总线空闲时SCLK引脚上保持高电平 922 // 923 //     <o5.9> CPHA: 时钟相位  924 //       <i> 用户可以用该位来选择同步模式下SLCK引脚上时钟输出的相位。和CPOL位一起配合来产 925 //       <i> 生用户希望的时钟/数据的采样关系(参见图174和0)  926 //       <i> 0:时钟第一个边沿进行数据捕获  927 //       <i> 1:时钟第二个边沿进行数据捕获 928 // 929 //     <o5.8> LBCL: 最后一位时钟脉冲  930 //       <i> 使用该位来控制是否在同步模式下,在SCLK引脚上输出最后发送的那个数据字节(MSB)对 931 //       <i> 应的时钟脉冲  932 //       <i> 0:最后一位数据的时钟脉冲不从SCLK输出  933 //       <i> 1:最后一位数据的时钟脉冲会从SCLK输出  934 //       <i> 注意:最后一个数据位就是第8或者第9个发送的位(根据USART_CR1寄存器中的M位所定 935 //       <i> 义的8或者9位数据帧格式) 936 // 937 //     <o5.6> LBDIE: LIN break检测中断使能  938 //       <i> Break中断掩码(使用break定界符来检测break)  939 //       <i> 0:中断被禁止  940 //       <i> 1:只要USART_SR寄存器中的LBD为1就产生中断  941 // 942 //     <o5.5> LBDL: LIN break检测长度  943 //       <i> 该位用来选择是11位还是10位的break检测  944 //       <i> 0:10位的break检测  945 //       <i> 1:11位的break检测 946 // 947 //     <o5.0..3> ADD[3:0]:该USART节点的地址  948 //       <i> 该位域给出这个USART节点的地址  949 //       <i> 这是在多处理器通信下的静默模式中使用的,使用地址标记来唤醒某个USART设备  950 // 951 //   </h>  952 // 953 // 954 //   <h> 控制寄存器3(USART_CR3) 19.5.6 955 //     <o6.10> CTSIE: CTS中断使能  956 //       <i> 0:中断被禁止  957 //       <i> 1:只要USART_SR寄存器中的CTS为1就产生中断 958 // 959 //     <o6.9> CTSE: CTS使能  960 //       <i> 0:CTS硬件流控制被禁止  961 //       <i> 1:CTS模式使能,只有nCTS输入信号有效(拉成低电平)时才能发送数据。如果在数据传 962 //       <i> 输的过程中,nCTS信号变成无效,那么发完这个数据后,传输就停止下来。如果当nCTS为 963 //       <i> 无效的时候,往数据寄存器里写了数据,那么这个数据要等到nCTS有效的时候才会被发送出去。 964 // 965 //     <o6.8> RTSE: RTS使能  966 //       <i> 0:RTS硬件流控制被禁止  967 //       <i> 1:RTS中断使能,只有接收缓冲区内有空闲的空间时才请求下一个数据。当前数据发送完 968 //       <i> 成后,发送操作就需要暂停下来。如果可以接收数据了,将nRTS输出置为有效(拉至低电平) 969 // 970 //     <o6.7> DMAT: DMA使能发送  971 //       <i> 由软件对该位清零或者置位  972 //       <i> 1:发送时的DMA模式使能  973 //       <i> 0:发送时的DMA模式被禁止 974 // 975 //     <o6.6> DMAR: DMA使能接收  976 //       <i> 由软件对该位清零或者置位  977 //       <i> 1:接收时的DMA模式使能  978 //       <i> 0:接收时的DMA模式被禁止 979 // 980 //     <o6.5> SCEN: 智能卡模式使能  981 //       <i> 该位用来使能智能卡模式  982 //       <i> 0:智能卡模式使能  983 //       <i> 1:智能卡模式被禁止 984 // 985 //     <o6.4> NACK:智能卡NACK使能  986 //       <i> 0:校验错误出现时,不发送NACK  987 //       <i> 1:校验错误出现时,发送NACK 988 // 989 //     <o6.3> HDSEL:半双工选择  990 //       <i> 选择单线半双工模式  991 //       <i> 0:不选择半双工模式  992 //       <i> 1:选择半双工模式 993 // 994 //     <o6.2> IRLP:红外低功耗  995 //       <i> 该位用来选择普通模式还是低功耗红外模式  996 //       <i> 0:通常模式  997 //       <i> 1:低功耗模式 998 // 999 //     <o6.1> IREN:红外模式使能 1000 //       <i> 由软件对该位清零或者置位 1001 //       <i> 0:红外被禁止 1002 //       <i> 1:红外使能1003 //1004 //     <o6.0> EIE:错误中断使能 1005 //       <i> 在多缓冲区通信模式下,当有帧错误、过载或者噪声错误时(USART_SR中德FE=1,或者1006 //       <i> ORE=1,或者NE=1),产生中断。 1007 //       <i> 0:中断被禁止 1008 //       <i> 1:只要USART_CR3中的DMAR=1,并且USART_SR中的FE=1,或者ORE=1,或者1009 //       <i> NE=1,产生中断1010 //1011 //   </h> 1012 //1013 //1014 //   <h> 保护时间和预分频寄存器(USART_GTPR) 19.5.7 1015 //     <o7.8..15> GT[7:0]:保护时间值 1016 //       <i> 该位域规定了以波特时钟为单位的保护时间的值。在智能卡模式下,需要这个功能。当保护1017 //       <i> 时间过去后,发送完成标志才被置起。1018 //1019 //     <o7.0..7> PSC[7:0]:预分频器值 1020 //       <i> - 在红外低功耗模式下: 1021 //       <i> PSC[7:0]=红外低功耗波特率 1022 //       <i> 对系统时钟分频已到达低功耗的频率: 1023 //       <i> 源时钟被寄存器中的值(仅有8位有效)分频 1024 //       <i> 00000000:保留 – 不要写入该值 1025 //       <i> 00000001:对源时钟1分频 1026 //       <i> 00000010:对源时钟2分频 1027 //       <i> …… 1028 //       <i> - 在红外的通常模式下:PSC只能设置为0000001 1029 //1030 //       <i> - 在智能卡模式下: 1031 //       <i> PSC[4:0]:预分频值 1032 //       <i> 对系统时钟进行分频,给智能卡提供时钟。 1033 //       <i> 寄存器中给出的值(5个有效位)乘以2后,作为对源时钟的分频因子 1034 //       <i> 00000:保留 – 不要写入该值 1035 //       <i> 00001:对源时钟进行2分频 1036 //       <i> 00010:对源时钟进行4分频 1037 //       <i> 00011:对源时钟进行6分频 1038 //       <i> …… 1039 //       <i> 注意:位[7:5]在智能卡模式下没有意义1040 //1041 //   </h> 1042 //1043 // </e>  1044  1045 #define USART_SETUP           11046 #define USART_SR_Val           0x000000001047 #define USART_DR_Val        0x000000001048 #define USART_BRR_Val       0x000000001049 #define USART_CR1_Val       0x000000001050 #define USART_CR2_Val          0x000000001051 #define USART_CR3_Val          0x000000001052 #define USART_CTPR_Val        0x000000001053 1054 // <e> 串行外设接口(SPI) 1055 //   <h> SPI控制寄存器1(SPI_CR1)   18.4.11056 //     <o1.15> BIDIMODE: 双向数据模式使能 1057 //       <i> 0:选择“双线双向”模式 1058 //       <i> 1:选择“单线双向”模式1059 //1060 //     <o1.14> BIDIOE: 双向模式下的输出使能 1061 //       <i> 和BIDIMODE位一起决定在“单线双向”模式下数据的输出方向 1062 //       <i> 0:输出禁止(只收模式) 1063 //       <i> 1:输出使能(只发模式) 1064 //       <i> 这个“单线”数据线在主设备端为MOSI引脚,在从设备端为MISO引脚。1065 //1066 //     <o1.13> CRCEN: 硬件CRC校验使能 1067 //       <i> 0:禁止CRC计算 1068 //       <i> 1:启动CRC计算 1069 //       <i> 注意:只有在SPI被禁止时(SPE=0),才能写该位,否则出错。 1070 //       <i> 该位只能在全双工模式下使用。1071 1072 //     <o1.12> CRCNEXT: 下一个发送CRC 1073 //       <i> 0:下一个发送的值来自发送缓冲区 1074 //       <i> 1:下一个发送的值来自发送CRC寄存器 1075 //       <i> 注意:最后一个数据被写入SPI_DR寄存器后应马上设置该位。该位只在全双工模式下使用。1076 //1077 //     <o1.11> DFF: 数据帧格式 1078 //       <i> 0:使用8位数据帧格式进行发送/接收 1079 //       <i> 1:使用16位数据帧格式进行发送/接收 1080 //       <i> 注意:只有当SPI被禁止(SPE=0)时,才能写该位,否则出错。1081 //1082 //     <o1.10> RXONLY:只接收 1083 //       <i> 该位和BIDIMODE位一起决定在“双线双向”模式下的传输方向。在多个从设备的配置中,1084 //       <i> 在未被访问的从设备上该位被置1,使得只有被访问的从设备有输出,从而不会造成数据线1085 //       <i> 上数据冲突。 1086 //       <i> 0:全双工(发送和接收) 1087 //       <i> 1:禁止输出(只接收模式)1088 //1089 //     <o1.9> SSM:软件从设备管理 1090 //       <i> 当SSM被置位时,NSS引脚上的电平由SSI位的值决定。 1091 //       <i> 0:禁止软件从设备管理。 1092 //       <i> 1:启用软件从设备管理1093 //1094 //     <o1.8> SSI: 内部从设备选择 1095 //       <i> 该位只在SSM被置位时意义:它决定了NSS引脚上的电平,在NSS引脚上操作的I/O输出无效。1096 1097 //     <o1.7> LSBFIRST:帧格式 1098 //       <i> 0:先发送MSB 1099 //       <i> 1:先发送LSB 1100 //       <i> 注:当通信在进行时不能改变该位的值。1101 //1102 //     <o1.6> SPE: SPI使能 1103 //       <i> 0:禁止SPI设备 1104 //       <i> 1:开启SPI设备1105 //1106 //     <o1.3..5> BR[2:0]:波特率控制 1107 //      <0=> fPCLK/2  <1=> fPCLK/4  <2=> fPCLK/8  <3=> fPCLK/16   1108 //      <4=> fPCLK/32  <5=> fPCLK/64  <6=> fPCLK/128  <7=> fPCLK/2561109 //       <i> 000: fPCLK/2 001: fPCLK/4 010: fPCLK/8 011: fPCLK/16 1110 //       <i> 100: fPCLK/32 101: fPCLK/64 110: fPCLK/128 111: fPCLK/256 1111 //       <i> 当通信正在进行的时候,不能修改这些位。1112 //1113 //     <o1.2> MSTR: 主设备选择 1114 //       <i> 0:配置为从设备 1115 //       <i> 1:配置为主设备 1116 //       <i> 注意:当通信正在进行的时候,不能修改该位。1117 1118 //     <o1.1> CPOL: 时钟极性 1119 //       <i> 0: 空闲状态时,SCK保持低电平 1120 //       <i> 1: 空闲状态时,SCK保持高电平 1121 //       <i> 注意:当通信正在进行的时候,不能修改该位。1122 1123 //     <o1.0> CPHA: 时钟相位 1124 //       <i> 0: 数据采样从第一个时钟边沿开始 1125 //       <i> 1: 数据采样从第二个时钟边沿开始 1126 //       <i> 注意:当通信正在进行的时候,不能修改该位。1127 //1128 //   </h> 1129 //1130 //   <h> SPI控制寄存器2(SPI_CR2)   18.4.21131 //     <o2.7> TXEIE:发送缓冲区空中断使能 1132 //       <i> 0:禁止TXE中断 1133 //       <i> 1:允许TXE中断,当TXE标志置位时产生中断请求 1134 //       <i> 注意:不要同时设置TXEIE和TXDMAEN 1135 1136 //     <o2.6> RXNEIE:接收缓冲区非空中断使能 1137 //       <i> 0:禁止RXNE中断 1138 //       <i> 1:允许RXNE中断,当RXNE标志置位时产生中断请求 1139 //       <i> 注意:不要同时设置RXEIE和RXDMAEN 1140 //1141 //     <o2.5> ERRIR:错误中断使能 1142 //       <i> 当错误(CRCERR、OVR、MODF)产生时,该位控制是否产生中断 1143 //       <i> 0:禁止错误中断 1144 //       <i> 1:允许错误中断1145 //1146 //     <o2.2> SSOE:SS输出使能 1147 //       <i> 0:禁止在主模式下SS输出,该设备可以工作在多主设备模式 1148 //       <i> 1:设备开启时,开启主模式下SS输出,该设备不能工作在多主设备模式1149 //1150 //     <o2.1> TXDMAEN:发送缓冲区DMA使能 1151 //       <i> 当该位被设置时,TXE标志一旦被置位就发出DMA请求 1152 //       <i> 0:禁止发送缓冲区DMA 1153 //       <i> 1:启动发送缓冲区DMA1154 //1155 //     <o2.0> RXDMAEN:接收缓冲区DMA使能 1156 //       <i> 当该位被设置时,RXNE标志一旦被置位就发出DMA请求 1157 //       <i> 0:禁止接收缓冲区DMA 1158 //       <i> 1:启动接收缓冲区DMA1159 //1160 //   </h> 1161 //1162 //   <h> SPI 状态寄存器(SPI_SR)   18.4.31163 //     <o3.7> BSY:忙标志 1164 //       <i> 0:SPI不忙 1165 //       <i> 1:SPI正忙于通信,或者发送缓冲非空 1166 //       <i> 该位由硬件置位或者复位1167 1168 //     <o3.6> OVR:溢出标志 1169 //       <i> 0:没有出现溢出错误 1170 //       <i> 1:出现溢出错误 1171 //       <i> 该位由硬件置位,由软件序列复位。关于软件序列的详细信息,参考章节18.3.81172 1173 //     <o3.5> MODF:模式错误 1174 //       <i> 0:没有出现模式错误 1175 //       <i> 1:出现模式错误 1176 //       <i> 该位由硬件置位,由软件序列复位。关于软件序列的详细信息,参考章节18.3.8 1177 //1178 //     <o3.4> CRCERR:CRC错误标志 1179 //       <i> 0:收到的CRC值和SPI_RXCRCR寄存器中的值匹配 1180 //       <i> 1:收到的CRC值和SPI_RXCRCR寄存器中的值不匹配 1181 //       <i> 该位由硬件置位,由软件写0而复位 1182 //       <i> 注意:该位只在全双工模式时有意义1183 //1184 //     <o3.1> TXE:发送缓冲为空 1185 //       <i> 0:发送缓冲非空 1186 //       <i> 1:发送缓冲为空1187 //1188 //     <o3.0> RXNE:接收缓冲非空 1189 //       <i> 0:接收缓冲为空 1190 //       <i> 1:接收缓冲非空1191 //1192 //   </h> 1193 //1194 //   <h> SPI 数据寄存器(SPI_DR)  18.4.41195 //     <o4.0..15> DR[15:0]:数据寄存器  <0-65535>1196 //       <i> 待发送或者已经收到的数据 1197 //       <i> 数据寄存器对应两个缓冲区:一个用于写(发送缓冲);另外一个用于读(接收缓冲)。1198 //       <i> 写操作将写数据到发送缓冲区;读操作将返回接收缓冲区里的数据。 1199 //       <i> 注意:根据SPI_CR1的DFF位对数据帧格式的选择,数据可以是8位或者16位的。要在启用1200 //       <i> SPI之前就确定好数据帧格式。 1201 //       <i> 对于8位的数据,发送和接收时只会用到SPI_DR[7:0]。在接收时,SPI_DR[15:8]被强制为0。 1202 //       <i> 对于16位的数据,发送和接收时会用到整个数据寄存器,即SPI_DR[15:0]。1203 //1204 //   </h> 1205 //1206 //   <h> SPI CRC多项式寄存器(SPI_CRCPR)  18.4.51207 //     <o5.0..15> CRCPOLY[15:0]:CRC多项式寄存器 <0-65535>1208 //       <i> 该寄存器包含了CRC计算时用到的多项式。其复位值为0x0007,根据应用要求可以做其他配置。1209 //1210 //   </h> 1211 //1212 //   <h> SPI Rx CRC寄存器(SPI_RXCRCR) 18.4.61213 //     <o6.0..15> RXCRC[15:0]:接收CRC寄存器  <0-65535>1214 //       <i> 在启用CRC计算的情况下,RXCRC[15:0]中包含了依据收到的字节计算的CRC数值。当1215 //       <i> SPI_CR1的CRCEN位被置位时,该寄存器被复位。CRC计算使用SPI_CRCPR中的多项式。 1216 //       <i> 当数据帧格式被设置为8位时,仅低8位参与计算,并且按照CRC8的方法进行;当数据帧格1217 //       <i> 式为16位时,寄存器中的所有16位都参与计算,并且按照CRC16–CCITT的标准。 1218 //       <i> 注意:当BSY标志被置位时读该寄存器,将可能读到不正确的数值。1219 //1220 //   </h> 1221 //1222 //   <h> SPI Tx CRC寄存器(SPI_TXCRCR)  18.4.7 1223 //     <o7.0..15> TXCRC[15:0]:发送CRC寄存器  <0-65535>1224 //       <i> 在启用CRC计算的情况下,TXCRC[15:0]中包含了依据将要发送的字节计算的CRC数值。当1225 //       <i> SPI_CR1中的CRCEN位被置位时,该寄存器被复位。CRC计算使用SPI_CRCPR中的多项式。 1226 //       <i> 当数据帧格式被设置为8位时,仅低8位参与计算,并且按照CRC8的方法进行;当数据帧格1227 //       <i> 式为16位时,寄存器中的所有16个位都参与计算,并且按照CRC16–CCITT的标准。 1228 //       <i> 注意:当BSY标志被置位时读该寄存器,将可能读到不正确的数值。1229 //1230 //   </h> 1231 //1232 // </e> 1233 1234 #define SPI_SETUP                11235 #define SPI_CR1_Val            0x0000 1236 #define SPI_CR2_Val            0x0000 1237 #define SPI_SR_Val             0x0000 1238 #define SPI_DR_Val             0x0000 1239 #define SPI_CRCPR_Val          0x0000 1240 #define SPI_RXCRCR_Val         0x0000 1241 #define SPI_TXCRCR_Val         0x0000 1242 1243 // <e> DMA 控制器(DMA) 1244 //   <h> DMA中断状态寄存器(DMA_ISR)   7.4.11245 //     <o1.27> TEIF7:通道7的传输错误标志 1246 //       <i> 硬件设置这些位。在DMA_IFCR寄存器的相应位写入1可以清除这里对应的标志位。 1247 //       <i> 0:在通道x没有传输错误(TE) 1248 //       <i> 1:在通道x发生传输错误(TE)1249 //     <o1.23> TEIF6:通道6的传输错误标志 1250 //     <o1.19> TEIF5:通道5的传输错误标志 1251 //     <o1.15> TEIF4:通道4的传输错误标志 1252 //     <o1.11> TEIF3:通道3的传输错误标志 1253 //     <o1.7>  TEIF2:通道2的传输错误标志 1254 //     <o1.3>  TEIF1:通道1的传输错误标志 1255 //1256 //     <o1.26> HTIF7:通道7的半传输标志1257 //       <i> 硬件设置这些位。在DMA_IFCR寄存器的相应位写入1可以清除这里对应的标志位。 1258 //       <i> 0:在通道x没有半传输事件(HT) 1259 //       <i> 1:在通道x产生半传输事件(HT)1260 //     <o1.22> HTIF6:通道6的半传输标志1261 //     <o1.18> HTIF5:通道5的半传输标志1262 //     <o1.14> HTIF4:通道4的半传输标志1263 //     <o1.10> HTIF3:通道3的半传输标志1264 //     <o1.6>  HTIF2:通道2的半传输标志1265 //     <o1.2>  HTIF1:通道1的半传输标志1266 //1267 //     <o1.25> TCIF7:通道7的传输完成标志 1268 //       <i> 硬件设置这些位。在DMA_IFCR寄存器的相应位写入1可以清除这里对应的标志位。 1269 //       <i> 0:在通道x没有传输完成事件(TC) 1270 //       <i> 1:在通道x产生传输完成事件(TC)1271 //     <o1.21> TCIF6:通道6的传输完成标志 1272 //     <o1.17> TCIF5:通道5的传输完成标志 1273 //     <o1.13> TCIF4:通道4的传输完成标志 1274 //     <o1.9> TCIF3:通道3的传输完成标志 1275 //     <o1.5> TCIF2:通道2的传输完成标志 1276 //     <o1.1> TCIF1:通道1的传输完成标志  1277 //1278 //     <o1.24> GIF7:通道7的全局中断标志 1279 //       <i> 硬件设置这些位。在DMA_IFCR寄存器的相应位写入1可以清除这里对应的标志位。 1280 //       <i> 0:在通道x没有TE、HT或TC事件 1281 //       <i> 1:在通道x产生TE、HT或TC事件 1282 //     <o1.20> GIF6:通道6的全局中断标志 1283 //     <o1.16> GIF5:通道5的全局中断标志 1284 //     <o1.12> GIF4:通道4的全局中断标志 1285 //     <o1.8>  GIF3:通道3的全局中断标志 1286 //     <o1.4>  GIF2:通道2的全局中断标志 1287 //     <o1.0>  GIF1:通道1的全局中断标志 1288 //1289 //   </h> 1290 //1291 //1292 //   <h> DMA中断标志清除寄存器(DMA_IFCR)  7.4.21293 //     <o2.27> CTEIF7:清除通道7的传输错误标志 1294 //       <i> 这些位由软件设置和清除。 1295 //       <i> 0:不起作用 1296 //       <i> 1:清除DMA_ISR寄存器中的对应TEIF标志。1297 //     <o2.23> CTEIF6:清除通道6的传输错误标志 1298 //     <o2.19> CTEIF5:清除通道5的传输错误标志 1299 //     <o2.15> CTEIF4:清除通道4的传输错误标志 1300 //     <o2.11> CTEIF3:清除通道3的传输错误标志 1301 //     <o2.7>  CTEIF2:清除通道2的传输错误标志 1302 //     <o2.3>  CTEIF1:清除通道1的传输错误标志 1303 //1304 //     <o2.26> CHTIF7:清除通道7的半传输标志 1305 //       <i> 这些位由软件设置和清除。 1306 //       <i> 0:不起作用 1307 //       <i> 0:清除DMA_ISR寄存器中的对应HTIF标志。1308 //     <o2.22> CHTIF6:清除通道6的半传输标志 1309 //     <o2.18> CHTIF5:清除通道5的半传输标志 1310 //     <o2.14> CHTIF4:清除通道4的半传输标志 1311 //     <o2.10> CHTIF3:清除通道3的半传输标志 1312 //     <o2.6>  CHTIF2:清除通道2的半传输标志 1313 //     <o2.2>  CHTIF1:清除通道1的半传输标志 1314 //1315 //     <o2.25> CTCIF7:清除通道7的传输完成标志  1316 //       <i> 这些位由软件设置和清除。 1317 //       <i> 0:不起作用 1318 //       <i> 0:清除DMA_ISR寄存器中的对应TCIF标志。1319 //     <o2.21> CTCIF6:清除通道6的传输完成标志 1320 //     <o2.17> CTCIF5:清除通道5的传输完成标志1321 //     <o2.13> CTCIF4:清除通道4的传输完成标志1322 //     <o2.9>  CTCIF3:清除通道3的传输完成标志1323 //     <o2.5>  CTCIF2:清除通道2的传输完成标志1324 //     <o2.1>  CTCIF1:清除通道1的传输完成标志1325 //1326 //     <o2.24> CGIF7:清除通道7的全局中断标志  1327 //       <i> 这些位由软件设置和清除。 1328 //       <i> 0:不起作用 1329 //       <i> 0:清除DMA_ISR寄存器中的对应的GIF、TEIF、HTIF和TCIF标志。1330 //     <o2.20> CGIF6:清除通道6的全局中断标志1331 //     <o2.16> CGIF5:清除通道5的全局中断标志1332 //     <o2.12> CGIF4:清除通道4的全局中断标志1333 //     <o2.8>  CGIF3:清除通道3的全局中断标志1334 //     <o2.4>  CGIF2:清除通道2的全局中断标志1335 //     <o2.0>  CGIF1:清除通道1的全局中断标志1336 //1337 //   </h> 1338 //1339 //1340 //   <h> DMA通道x配置寄存器(DMA_CCRx)(x = 1…7) 7.4.3  1341 //     <o3.14> MEM2MEM:存储器到存储器模式 1342 //       <i> 该位由软件设置和清除。 1343 //       <i> 0:非存储器到存储器模式 1344 //       <i> 1:启动存储器到存储器模式1345 //1346 //     <o3.12..13> PL[1:0]:通道优先级 1347 //      <0=> 低  <1=> 中  <2=> 高  <3=> 最高1348 //       <i> 这些位由软件设置和清除。 1349 //       <i> 00:低 1350 //       <i> 01:中 1351 //       <i> 10:高 1352 //       <i> 11:最高1353 //1354 //     <o3.10..11> MSIZE[1:0]:存储器数据宽度1355 //      <0=> 8位  <1=> 16位  <2=> 32位  <3=> 保留1356 //       <i> 这些位由软件设置和清除。 1357 //       <i> 00:8位 1358 //       <i> 01:16位 1359 //       <i> 10:32位 1360 //       <i> 11:保留1361 //1362 //     <o3.8..9> PSIZE[1:0]:外设数据宽度 1363 //      <0=> 8位  <1=> 16位  <2=> 32位  <3=> 保留1364 //       <i> 这些位由软件设置和清除。 1365 //       <i> 00:8位 1366 //       <i> 01:16位 1367 //       <i> 10:32位 1368 //       <i> 11:保留1369 //1370 //     <o3.7> MINC:存储器地址增量模式 1371 //       <i> 该位由软件设置和清除。 1372 //       <i> 0:不执行存储器地址增量操作 1373 //       <i> 1:执行存储器地址增量操作1374 //1375 //     <o3.6> PINC:外设地址增量模式 1376 //       <i> 该位由软件设置和清除。 1377 //       <i> 0:不执行外设地址增量操作 1378 //       <i> 1:执行外设地址增量操作1379 //1380 //     <o3.5> CIRC:循环模式 1381 //       <i> 该位由软件设置和清除。 1382 //       <i> 0:不执行循环操作 1383 //       <i> 1:执行循环操作1384 //1385 //     <o3.4> DIR:数据传输方向 1386 //       <i> 该位由软件设置和清除。 1387 //       <i> 0:从外设读 1388 //       <i> 1:从存储器读1389 //1390 //     <o3.3> TEIE:允许传输错误中断 1391 //       <i> 该位由软件设置和清除。 1392 //       <i> 0:禁止TE中断 1393 //       <i> 1:允许TE中断1394 //1395 //     <o3.2> HTIE:允许半传输中断 1396 //       <i> 该位由软件设置和清除。 1397 //       <i> 0:禁止HT中断 1398 //       <i> 1:允许HT中断1399 //1400 //     <o3.1> TCIE:允许传输完成中断 1401 //       <i> 该位由软件设置和清除。 1402 //       <i> 0:禁止TC中断 1403 //       <i> 1:允许TC中断1404 //1405 //     <o3.0> EN:通道开启 1406 //       <i> 该位由软件设置和清除。 1407 //       <i> 0:通道不工作 1408 //       <i> 1:通道开启1409 //1410 //   </h> 1411 //1412 //   <h> DMA通道x传输数量寄存器(DMA_CNDTRx)(x = 1…7)  7.4.4  1413 //     <o4.0..15> NDT[15:0]:数据传输数量 1414 //       <i> 数据传输数量为0至65535。这个寄存器只能在通道不工作(DMA_CCRx的1415 //       <i> EN=0)时写入。通道开启后该寄存器变为只读,指示剩余的待传输的字节数1416 //       <i> 目。寄存器内容在每次DMA传输后递减。 1417 //       <i> 数据传输结束后,寄存器的内容或者变为0;或者当该通道配置为自动重加载1418 //       <i> 模式时,寄存器的内容将被自动重新加载为之前配置时的数值。 1419 //       <i> 当寄存器的内容为0时,无论通道是否开启,都不会发生任何数据传输。1420 //   </h> 1421 //1422 //   <h> DMA通道x外设地址寄存器(DMA_CPARx)(x = 1…7)  7.4.5 1423 //     <o5.0..31> PA[31:0]:外设地址 1424 //       <i> 外设数据寄存器的基地址,作为数据传输的源或目标。1425 //   </h> 1426 //1427 //   <h> DMA通道x存储器地址寄存器(DMA_CMARx)(x = 1…7)  7.4.6  1428 //     <o6.0..31> MA[31:0]:存储器地址 1429 //       <i> 存储器地址作为数据传输的源或目标。1430 //   </h> 1431 //1432 // </e> 1433 #define DMA_SETUP                11434 #define DMA_CR1_Val            0x0000 1435 #define DMA_CR2_Val            0x0000 1436 #define DMA_SR_Val             0x0000 1437 #define DMA_DR_Val             0x0000 1438 #define DMA_CRCPR_Val          0x0000 1439 #define DMA_RXCRCR_Val         0x0000 

 

stm32f10x寄存器设置脚本