stm32f10x寄存器设置脚本

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

 

转载于:https://www.cnblogs.com/yuwl26/p/3939416.html

你可能感兴趣的:(stm32f10x寄存器设置脚本)