stm32f1xx_STUperipheralRegisters.c 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747
  1. #include "stm32f1xx_STUperipheralRegisters.h"
  2. #include "stm32fxx_STUlib.h"
  3. #include "var.h"
  4. #define TEST_DATA_32B_0X55 0x55555555
  5. #define TEST_DATA_32B_0XAA 0xAAAAAAAA
  6. uint8_t GPIO_register_selftest(GPIO_TypeDef* GPIOx);
  7. uint8_t AFIO_register_selftest(AFIO_TypeDef* AFIOx);
  8. uint8_t CAN_register_selftest(CAN_TypeDef* CANx);
  9. uint8_t DMA_Channel_selftest(DMA_Channel_TypeDef* DMA);
  10. uint8_t ADC_register_selftest(ADC_TypeDef* ADCx);
  11. uint8_t TIM_register_selftest(TIM_TypeDef* TIMx);
  12. void STU_delay_us(uint16_t time)
  13. {
  14. uint16_t i=0;
  15. while(time--)
  16. {
  17. i=7; //72MHZ主频,1us
  18. while(i--) ;
  19. }
  20. }
  21. uint8_t STU_PeripheralRegistersTest(void)
  22. {
  23. //uint8_t result;
  24. /*********************** GPIO registers test*******************/
  25. __HAL_RCC_GPIOA_CLK_ENABLE();
  26. __HAL_RCC_GPIOB_CLK_ENABLE();
  27. __HAL_RCC_GPIOC_CLK_ENABLE();
  28. __HAL_RCC_GPIOD_CLK_ENABLE();
  29. if(GPIO_register_selftest(GPIOA) == ERROR )
  30. {
  31. return ERROR;
  32. }
  33. if(GPIO_register_selftest(GPIOB) == ERROR )
  34. {
  35. return ERROR;
  36. }
  37. if(GPIO_register_selftest(GPIOC) == ERROR )
  38. {
  39. return ERROR;
  40. }
  41. if(GPIO_register_selftest(GPIOD) == ERROR )
  42. {
  43. return ERROR;
  44. }
  45. __HAL_RCC_GPIOA_CLK_DISABLE();
  46. __HAL_RCC_GPIOB_CLK_DISABLE();
  47. __HAL_RCC_GPIOC_CLK_DISABLE();
  48. __HAL_RCC_GPIOD_CLK_DISABLE();
  49. AFIO_register_selftest(AFIO);
  50. /*********************** CAN registers test*******************/
  51. // __HAL_RCC_CAN1_CLK_ENABLE();
  52. // if(CAN_register_selftest(CAN1) == ERROR)
  53. // {
  54. // return ERROR;
  55. // }
  56. // __HAL_RCC_CAN1_CLK_DISABLE();
  57. /*********************** DMA registers test*******************/
  58. __HAL_RCC_DMA1_CLK_ENABLE();
  59. if(DMA_Channel_selftest(DMA1_Channel1) == ERROR)
  60. {
  61. return ERROR;
  62. }
  63. __HAL_RCC_DMA1_CLK_DISABLE();
  64. /*********************** ADC registers test*******************/
  65. __HAL_RCC_ADC1_CLK_ENABLE();
  66. __HAL_RCC_ADC2_CLK_ENABLE();
  67. if(ADC_register_selftest(ADC1) == ERROR)
  68. {
  69. return ERROR;
  70. }
  71. if(ADC_register_selftest(ADC2) == ERROR)
  72. {
  73. return ERROR;
  74. }
  75. __HAL_RCC_ADC1_CLK_DISABLE();
  76. __HAL_RCC_ADC2_CLK_DISABLE();
  77. /*********************** TIM registers test*******************/
  78. __HAL_RCC_TIM1_CLK_ENABLE();
  79. if(TIM_register_selftest(TIM1) == ERROR)
  80. {
  81. return ERROR;
  82. }
  83. __HAL_RCC_TIM1_CLK_DISABLE();
  84. return SUCCESS;
  85. }
  86. uint8_t GPIO_register_selftest(GPIO_TypeDef* GPIOx)
  87. {
  88. unsigned long val=0;
  89. // unsigned int uint_val=0;
  90. GPIO_TypeDef GPIO_tmp;
  91. /*备份寄存器的复位默认值*/
  92. GPIO_tmp.CRL = GPIOx->CRL;
  93. GPIO_tmp.CRH = GPIOx->CRH;
  94. //GPIO_tmp.IDR = GPIOx->IDR; //read only
  95. GPIO_tmp.ODR = GPIOx->ODR;
  96. //GPIO_tmp.BSRR = GPIOx->BSRR ; //write only
  97. //GPIO_tmp.BRR = GPIOx->BRR; //write only
  98. //GPIO_tmp.LCKR = GPIOx->LCKR; //lock register,don't test
  99. if(GPIOx != GPIOD)
  100. {
  101. //////////CRL //////////////
  102. GPIOx->CRL=TEST_DATA_32B_0X55;
  103. //GPIOx->CRL=0x55555554;
  104. val=GPIOx->CRL;
  105. if(val!=TEST_DATA_32B_0X55)
  106. {
  107. //FIT_testflag = 10;
  108. return (0);
  109. }
  110. GPIOx->CRL=TEST_DATA_32B_0XAA;
  111. val=GPIOx->CRL;
  112. if(val!=TEST_DATA_32B_0XAA)
  113. return (0);
  114. ///////////CRH/////////////////////
  115. GPIOx->CRH=TEST_DATA_32B_0X55;
  116. val=GPIOx->CRH;
  117. if(val!=TEST_DATA_32B_0X55)
  118. return (0);
  119. GPIOx->CRH=TEST_DATA_32B_0XAA;
  120. val=GPIOx->CRH;
  121. if(val!=TEST_DATA_32B_0XAA)
  122. return (0);
  123. ///////////ODR/////////////////////
  124. GPIOx->ODR=0x00005555;
  125. val=GPIOx->ODR;
  126. if((val& 0x0000FFFF)!=0x00005555)
  127. return (0);
  128. GPIOx->ODR=0x0000AAAA;
  129. val=GPIOx->ODR;
  130. if((val& 0x0000FFFF)!=0x0000AAAA)
  131. return (0);
  132. }
  133. else
  134. {
  135. //////////CRL //////////////
  136. GPIOx->CRL=(GPIO_tmp.CRL&0xFFFFF000)|0x00000555;
  137. val=GPIOx->CRL;
  138. if( (val&0x00000FFF) !=0x00000555 )
  139. {
  140. return (0);
  141. }
  142. GPIOx->CRL=(GPIO_tmp.CRL&0xFFFFF000)|0x00000AAA;
  143. val=GPIOx->CRL;
  144. if( (val&0x00000FFF) !=0x00000AAA )
  145. return (0);
  146. ///////////ODR/////////////////////
  147. GPIOx->ODR=(GPIO_tmp.ODR&0xFFFFFFF8)|0x00000007;
  148. val=GPIOx->ODR;
  149. if((val& 0x00000007)!=0x00000007)
  150. return (0);
  151. GPIOx->ODR=(GPIO_tmp.ODR&0xFFFFFFF8)|0x00000000;
  152. val=GPIOx->ODR;
  153. if((val& 0x00000007)!=0x00000000)
  154. return (0);
  155. }
  156. /*恢复寄存器的复位默认值*/
  157. GPIOx->CRL = GPIO_tmp.CRL;
  158. GPIOx->CRH = GPIO_tmp.CRH;
  159. GPIOx->ODR = GPIO_tmp.ODR;
  160. return (1);
  161. }
  162. uint8_t AFIO_register_selftest(AFIO_TypeDef* AFIOx)
  163. {
  164. uint32_t val=0;
  165. AFIO_TypeDef AFIO_tmp;
  166. /*备份寄存器的复位默认值*/
  167. AFIO_tmp.EVCR = AFIOx->EVCR;
  168. AFIO_tmp.MAPR = AFIOx->MAPR;
  169. AFIO_tmp.EXTICR[0] = AFIOx->EXTICR[0] ;
  170. AFIO_tmp.EXTICR[1] = AFIOx->EXTICR[1] ;
  171. AFIO_tmp.EXTICR[2] = AFIOx->EXTICR[2] ;
  172. AFIO_tmp.EXTICR[3] = AFIOx->EXTICR[3] ;
  173. //////////EVCR//////////////
  174. AFIOx->EVCR=0x00000055;
  175. val=AFIOx->EVCR;
  176. if(val!=0x00000055)
  177. return (0);
  178. AFIOx->EVCR=0x000000AA;
  179. val=AFIOx->EVCR;
  180. if(val!=0x000000AA)
  181. return (0);
  182. //////////MAPR //////////////
  183. AFIOx->MAPR=0x00005555;
  184. val=AFIOx->MAPR;
  185. if(val!=0x00005555)
  186. return (0);
  187. AFIOx->MAPR=0x0000AAAA;
  188. val=(AFIOx->MAPR)&0x0000AAAA;
  189. if(val!=0x0000AAAA)
  190. return (0);
  191. //////////EXTICR[0] //////////////
  192. AFIOx->EXTICR[0]=0x00005555;
  193. val=AFIOx->EXTICR[0];
  194. if(val!=0x00005555)
  195. return (0);
  196. AFIOx->EXTICR[0]=0x00002AAA;
  197. val=AFIOx->EXTICR[0];
  198. if(val!=0x00002AAA)
  199. return (0);
  200. //////////EXTICR[1] //////////////
  201. AFIOx->EXTICR[1]=0x00005555;
  202. val=AFIOx->EXTICR[1];
  203. if(val!=0x00005555)
  204. return (0);
  205. AFIOx->EXTICR[1]=0x00002AAA;
  206. val=AFIOx->EXTICR[1];
  207. if(val!=0x00002AAA)
  208. return (0);
  209. //////////EXTICR[2] //////////////
  210. AFIOx->EXTICR[2]=0x00005555;
  211. val=AFIOx->EXTICR[2];
  212. if(val!=0x00005555)
  213. return (0);
  214. AFIOx->EXTICR[2]=0x00002AAA;
  215. val=AFIOx->EXTICR[2];
  216. if(val!=0x00002AAA)
  217. return (0);
  218. //////////EXTICR[3] //////////////
  219. AFIOx->EXTICR[3]=0x00005555;
  220. val=AFIOx->EXTICR[3];
  221. if(val!=0x00005555)
  222. return (0);
  223. AFIOx->EXTICR[3]=0x00002AAA;
  224. val=AFIOx->EXTICR[3];
  225. if(val!=0x00002AAA)
  226. return (0);
  227. /*恢复寄存器的复位默认值*/
  228. AFIOx->EVCR = AFIO_tmp.EVCR;
  229. AFIOx->MAPR = AFIO_tmp.MAPR;
  230. AFIOx->EXTICR[0] = AFIO_tmp.EXTICR[0] ;
  231. AFIOx->EXTICR[1] = AFIO_tmp.EXTICR[1] ;
  232. AFIOx->EXTICR[2] = AFIO_tmp.EXTICR[2] ;
  233. AFIOx->EXTICR[3] = AFIO_tmp.EXTICR[3] ;
  234. return (1);
  235. }
  236. uint8_t CAN_register_selftest(CAN_TypeDef* CANx)
  237. {
  238. unsigned long val=0;
  239. //unsigned int uint_val=0;
  240. uint32_t tmp_CAN_IER,tmp_CAN_BTR; //tmp_CAN_MCR
  241. //tmp_CAN_MCR = CANx->MCR;
  242. tmp_CAN_IER = CANx->IER;
  243. // tmp_CAN_ESR = CANx->ESR;
  244. tmp_CAN_BTR = CANx->BTR;
  245. //////////MCR //////////////
  246. CANx->MCR=0x00000055;
  247. val=CANx->MCR;
  248. if(val!=0x00000055)
  249. return (0);
  250. CANx->MCR=0x000000A8;
  251. val=CANx->MCR;
  252. val = val & 0x000000A8;
  253. if(val!=0x000000A8)
  254. return (0);
  255. ///////////IER//////////////
  256. CANx->IER=0x00010555;
  257. val=CANx->IER;
  258. if(val!=0x00010555)
  259. return (0);
  260. CANx->IER=0x00028A2A;
  261. val=CANx->IER;
  262. if(val!=0x00028A2A)
  263. return (0);
  264. /////////////ESR//////////////
  265. // CANx->ESR=0x00000050;
  266. // val=CANx->ESR;
  267. // if(val!=0x00000050)
  268. // return (0);
  269. // CANx->ESR=0x00000020;
  270. // val=CANx->ESR;
  271. // if(val!=0x00000020)
  272. // return (0);
  273. ///////////BTR//////////////
  274. CANx->MCR=0x01;
  275. CANx->BTR=0x41550155;
  276. val=CANx->BTR;
  277. if(val!=0x41550155)
  278. return (0);
  279. CANx->BTR=0x822A02AA;
  280. val=CANx->BTR;
  281. if(val!=0x822A02AA)
  282. return (0);
  283. CANx->IER = tmp_CAN_IER;
  284. // CANx->ESR = tmp_CAN_ESR;
  285. CANx->BTR = tmp_CAN_BTR;
  286. CANx->MCR = 0x00008000; //复位MCR寄存器
  287. return (1);
  288. }
  289. uint8_t DMA_Channel_selftest(DMA_Channel_TypeDef* DMA_Channelx)
  290. {
  291. unsigned long val=0;
  292. //unsigned int uint_val=0;
  293. DMA_Channel_TypeDef DMA_Channelx_tmp;
  294. DMA_Channelx_tmp.CCR = DMA_Channelx->CCR;
  295. DMA_Channelx_tmp.CNDTR = DMA_Channelx->CNDTR;
  296. DMA_Channelx_tmp.CPAR = DMA_Channelx->CPAR;
  297. DMA_Channelx_tmp.CMAR = DMA_Channelx->CMAR;
  298. //////////CCR//////////////
  299. DMA_Channelx->CCR = 0x00000000;
  300. DMA_Channelx->CCR=0x00005555;
  301. val=DMA_Channelx->CCR;
  302. if(val!=0x00005555)
  303. return (0);
  304. DMA_Channelx->CCR = 0x00000000;
  305. DMA_Channelx->CCR=0x00002AAA;
  306. val=DMA_Channelx->CCR;
  307. if(val!=0x00002AAA)
  308. return (0);
  309. //////////CNDTR//////////////
  310. DMA_Channelx->CCR = 0x00000000;
  311. DMA_Channelx->CNDTR=0x00005555;
  312. STU_delay_us(5);
  313. val=DMA_Channelx->CNDTR;
  314. if(val!=0x00005555)
  315. return (0);
  316. DMA_Channelx->CNDTR=0x0000AAAA;
  317. STU_delay_us(5);
  318. val=DMA_Channelx->CNDTR;
  319. if(val!=0x0000AAAA)
  320. return (0);
  321. //////////CPAR//////////////
  322. DMA_Channelx->CPAR=TEST_DATA_32B_0X55;
  323. val=DMA_Channelx->CPAR;
  324. if(val!=TEST_DATA_32B_0X55)
  325. return (0);
  326. DMA_Channelx->CPAR=TEST_DATA_32B_0XAA;
  327. val=DMA_Channelx->CPAR;
  328. if(val!=TEST_DATA_32B_0XAA)
  329. return (0);
  330. //////////CMAR//////////////
  331. DMA_Channelx->CMAR=TEST_DATA_32B_0X55;
  332. val=DMA_Channelx->CMAR;
  333. if(val!=TEST_DATA_32B_0X55)
  334. return (0);
  335. DMA_Channelx->CMAR=TEST_DATA_32B_0XAA;
  336. val=DMA_Channelx->CMAR;
  337. if(val!=TEST_DATA_32B_0XAA)
  338. return (0);
  339. DMA_Channelx->CNDTR = DMA_Channelx_tmp.CNDTR;
  340. DMA_Channelx->CPAR = DMA_Channelx_tmp.CPAR;
  341. DMA_Channelx->CMAR = DMA_Channelx_tmp.CMAR;
  342. DMA_Channelx->CCR = DMA_Channelx_tmp.CCR;
  343. return (1);
  344. }
  345. uint8_t ADC_register_selftest(ADC_TypeDef* ADCx)
  346. {
  347. unsigned long val=0;
  348. //unsigned int uint_val=0;
  349. //////////CR1//////////////
  350. // ADCx->CR1=0x00000000;
  351. // val=ADCx->CR1;
  352. // if(val!=0x00000000)
  353. // return (0);
  354. if(ADCx==ADC1)
  355. {
  356. ADCx->CR1=0x00455555;
  357. val=ADCx->CR1;
  358. if(val!=0x00455555)
  359. return (0);
  360. ADCx->CR1=0x008AAAAA;
  361. val=ADCx->CR1;
  362. if(val!=0x008AAAAA)
  363. return (0);
  364. }
  365. if(ADCx==ADC2) //ADC2 16-19位是保留位
  366. {
  367. ADCx->CR1=0x00405555;
  368. val=ADCx->CR1;
  369. if(val!=0x00405555)
  370. return (0);
  371. ADCx->CR1=0x0080AAAA;
  372. val=ADCx->CR1;
  373. if(val!=0x0080AAAA)
  374. return (0);
  375. }
  376. // //////////CR2//////////////
  377. // ADCx->CR2=0x00145101;
  378. // val=ADCx->CR2;
  379. // if(val!=0x00145101)
  380. // return (0);
  381. // ADCx->CR2=0x008AA80A;
  382. // val=ADCx->CR2;
  383. // if(val!=0x008AA80A)
  384. // return (0);
  385. //////////SMPR1//////////////
  386. // ADCx->SMPR1=0x00555555;
  387. // val=ADCx->SMPR1;
  388. // if(val!=0x00555555)
  389. // return (0);
  390. // ADCx->SMPR1=0x00AAAAAA;
  391. // val=ADCx->SMPR1;
  392. // if(val!=0x00AAAAAA)
  393. // return (0);
  394. // //////////SMPR2//////////////
  395. // ADCx->SMPR2=0x15555555;
  396. // val=ADCx->SMPR2;
  397. // if(val!=0x15555555)
  398. // return (0);
  399. // ADCx->SMPR2=0x2AAAAAAA;
  400. // val=ADCx->SMPR2;
  401. // if(val!=0x2AAAAAAA)
  402. // return (0);
  403. //////////JOFR1 //////////////
  404. ADCx->JOFR1=0x00000555;
  405. val=ADCx->JOFR1;
  406. if(val!=0x00000555)
  407. return (0);
  408. ADCx->JOFR1=0x00000AAA;
  409. val=ADCx->JOFR1;
  410. if(val!=0x00000AAA)
  411. return (0);
  412. //////////JOFR2 //////////////
  413. ADCx->JOFR2=0x00000555;
  414. val=ADCx->JOFR2;
  415. if(val!=0x00000555)
  416. return (0);
  417. ADCx->JOFR2=0x00000AAA;
  418. val=ADCx->JOFR2;
  419. if(val!=0x00000AAA)
  420. return (0);
  421. //////////JOFR3 //////////////
  422. ADCx->JOFR3=0x00000555;
  423. val=ADCx->JOFR3;
  424. if(val!=0x00000555)
  425. return (0);
  426. ADCx->JOFR3=0x00000AAA;
  427. val=ADCx->JOFR3;
  428. if(val!=0x00000AAA)
  429. return (0);
  430. //////////JOFR4 //////////////
  431. ADCx->JOFR4=0x00000555;
  432. val=ADCx->JOFR4;
  433. if(val!=0x00000555)
  434. return (0);
  435. ADCx->JOFR4=0x00000AAA;
  436. val=ADCx->JOFR4;
  437. if(val!=0x00000AAA)
  438. return (0);
  439. //////////HTR //////////////
  440. ADCx->HTR=0x00000555;
  441. val=ADCx->HTR;
  442. if(val!=0x00000555)
  443. return (0);
  444. ADCx->HTR=0x00000AAA;
  445. val=ADCx->HTR;
  446. if(val!=0x00000AAA)
  447. return (0);
  448. //////////LTR //////////////
  449. ADCx->LTR=0x00000555;
  450. val=ADCx->LTR;
  451. if(val!=0x00000555)
  452. return (0);
  453. ADCx->LTR=0x00000AAA;
  454. val=ADCx->LTR;
  455. if(val!=0x00000AAA)
  456. return (0);
  457. //////////SQR1 //////////////
  458. ADCx->SQR1=0x00555555;
  459. val=ADCx->SQR1;
  460. if(val!=0x00555555)
  461. return (0);
  462. ADCx->SQR1=0x00AAAAAA;
  463. val=ADCx->SQR1;
  464. if(val!=0x00AAAAAA)
  465. return (0);
  466. //////////SQR2//////////////
  467. ADCx->SQR2=0x15555555;
  468. val=ADCx->SQR2;
  469. if(val!=0x15555555)
  470. return (0);
  471. ADCx->SQR2=0x2AAAAAAA;
  472. val=ADCx->SQR2;
  473. if(val!=0x2AAAAAAA)
  474. return (0);
  475. //////////SQR3//////////////
  476. ADCx->SQR3=0x15555555;
  477. val=ADCx->SQR3;
  478. if(val!=0x15555555)
  479. return (0);
  480. ADCx->SQR3=0x2AAAAAAA;
  481. val=ADCx->SQR3;
  482. if(val!=0x2AAAAAAA)
  483. return (0);
  484. //////////JSQR//////////////
  485. ADCx->JSQR=0x00155555;
  486. val=ADCx->JSQR;
  487. if(val!=0x00155555)
  488. return (0);
  489. ADCx->JSQR=0x002AAAAA;
  490. val=ADCx->JSQR;
  491. if(val!=0x002AAAAA)
  492. return (0);
  493. ADCx->CR1=0x00000000;
  494. // ADCx->CR2=0x00000000;
  495. ADCx->SMPR1=0x00000000;
  496. ADCx->SMPR2=0x00000000;
  497. ADCx->JOFR1=0x00000000;
  498. ADCx->JOFR2=0x00000000;
  499. ADCx->JOFR3=0x00000000;
  500. ADCx->JOFR4=0x00000000;
  501. ADCx->HTR =0x00000fff;
  502. ADCx->LTR =0x00000000;
  503. ADCx->SQR1 =0x00000000;
  504. ADCx->SQR2 =0x00000000;
  505. ADCx->SQR3 =0x00000000;
  506. ADCx->JSQR =0x00000000;
  507. return (1);
  508. }
  509. uint8_t TIM_register_selftest(TIM_TypeDef* TIMx)
  510. {
  511. uint16_t val=0;
  512. // unsigned int uint_val=0;
  513. //////////CR1//////////////
  514. TIMx->CR1=0x0105;
  515. val=TIMx->CR1;
  516. if(val!=0x0105)
  517. return (0);
  518. TIMx->CR1=0x028A;
  519. val=TIMx->CR1;
  520. if(val!=0x028A)
  521. return (0);
  522. TIMx->CR1=0x0000;
  523. //////////CR2//////////////
  524. TIMx->CR2=0x5555;
  525. val=TIMx->CR2;
  526. if(val!=0x5555)
  527. return (0);
  528. TIMx->CR2=0x2AA8;
  529. val=TIMx->CR2;
  530. if(val!=0x2AA8)
  531. return (0);
  532. TIMx->CR2=0x0000;
  533. //////////SMCR//////////////
  534. TIMx->SMCR=0x5555;
  535. val=TIMx->SMCR;
  536. if(val!=0x5555)
  537. return (0);
  538. TIMx->SMCR=0xAAA2;
  539. val=TIMx->SMCR;
  540. if(val!=0xAAA2)
  541. return (0);
  542. TIMx->SMCR=0x0000;
  543. //////////DIER//////////////
  544. TIMx->DIER=0x5555;
  545. val=TIMx->DIER;
  546. if(val!=0x5555)
  547. return (0);
  548. TIMx->DIER=0x2AAA;
  549. val=TIMx->DIER;
  550. if(val!=0x2AAA)
  551. return (0);
  552. TIMx->DIER=0x0000;
  553. //////////CCMR1//////////////
  554. TIMx->CCMR1=0x5555;
  555. val=TIMx->CCMR1;
  556. if(val!=0x5555)
  557. return (0);
  558. TIMx->CCMR1=0xAAAA;
  559. val=TIMx->CCMR1;
  560. if(val!=0xAAAA)
  561. return (0);
  562. TIMx->CCMR1=0x0000;
  563. //////////CCMR2//////////////
  564. TIMx->CCMR2=0x5555;
  565. val=TIMx->CCMR2;
  566. if(val!=0x5555)
  567. return (0);
  568. TIMx->CCMR2=0xAAAA;
  569. val=TIMx->CCMR2;
  570. if(val!=0xAAAA)
  571. return (0);
  572. TIMx->CCMR2=0x0000;
  573. //////////CCER//////////////
  574. TIMx->CCER=0x1555;
  575. val=TIMx->CCER;
  576. if(val!=0x1555)
  577. return (0);
  578. TIMx->CCER=0x2AAA;
  579. val=TIMx->CCER;
  580. if(val!=0x2AAA)
  581. return (0);
  582. TIMx->CCER=0x0000;
  583. //////////CNT//////////////
  584. TIMx->CNT=0x5555;
  585. val=TIMx->CNT;
  586. if(val!=0x5555)
  587. return (0);
  588. TIMx->CNT=0xAAAA;
  589. val=TIMx->CNT;
  590. if(val!=0xAAAA)
  591. return (0);
  592. TIMx->CNT=0x0000;
  593. //////////PSC//////////////
  594. TIMx->PSC=0x5555;
  595. val=TIMx->PSC;
  596. if(val!=0x5555)
  597. return (0);
  598. TIMx->PSC=0xAAAA;
  599. val=TIMx->PSC;
  600. if(val!=0xAAAA)
  601. return (0);
  602. TIMx->PSC=0x0000;
  603. //////////ARR//////////////
  604. TIMx->ARR=0x5555;
  605. val=TIMx->ARR;
  606. if(val!=0x5555)
  607. return (0);
  608. TIMx->ARR=0xAAAA;
  609. val=TIMx->ARR;
  610. if(val!=0xAAAA)
  611. return (0);
  612. TIMx->ARR=0x0000;
  613. //////////RCR//////////////
  614. TIMx->RCR=0x0055;
  615. val=TIMx->RCR;
  616. if(val!=0x0055)
  617. return (0);
  618. TIMx->RCR=0x00AA;
  619. val=TIMx->RCR;
  620. if(val!=0x00AA)
  621. return (0);
  622. TIMx->RCR=0x0000;
  623. //////////CCR1//////////////
  624. TIMx->CCR1=0x5555;
  625. val=TIMx->CCR1;
  626. if(val!=0x5555)
  627. return (0);
  628. TIMx->CCR1=0xAAAA;
  629. val=TIMx->CCR1;
  630. if(val!=0xAAAA)
  631. return (0);
  632. TIMx->CCR1=0x0000;
  633. //////////CCR2//////////////
  634. TIMx->CCR2=0x5555;
  635. val=TIMx->CCR2;
  636. if(val!=0x5555)
  637. return (0);
  638. TIMx->CCR2=0xAAAA;
  639. val=TIMx->CCR2;
  640. if(val!=0xAAAA)
  641. return (0);
  642. TIMx->CCR2=0x0000;
  643. //////////CCR3//////////////
  644. TIMx->CCR3=0x5555;
  645. val=TIMx->CCR3;
  646. if(val!=0x5555)
  647. return (0);
  648. TIMx->CCR3=0xAAAA;
  649. val=TIMx->CCR3;
  650. if(val!=0xAAAA)
  651. return (0);
  652. TIMx->CCR3=0x0000;
  653. //////////CCR4//////////////
  654. TIMx->CCR4=0x5555;
  655. val=TIMx->CCR4;
  656. if(val!=0x5555)
  657. return (0);
  658. TIMx->CCR4=0xAAAA;
  659. val=TIMx->CCR4;
  660. if(val!=0xAAAA)
  661. return (0);
  662. TIMx->CCR4=0x0000;
  663. ////////////BDTR//////////////
  664. // TIMx->BDTR=0x5455;
  665. // val=TIMx->BDTR;
  666. // if(val!=0x5455)
  667. // return (12);
  668. // TIMx->BDTR=0xA8AA;
  669. // val=TIMx->BDTR;
  670. // if(val!=0xA8AA)
  671. // return (12);
  672. //////////DCR//////////////
  673. TIMx->DCR=0x1515;
  674. val=TIMx->DCR;
  675. if(val!=0x1515)
  676. return (0);
  677. TIMx->DCR=0x0A0A;
  678. val=TIMx->DCR;
  679. if(val!=0x0A0A)
  680. return (0);
  681. TIMx->DCR=0x0000;
  682. TIMx->SR = 0x0000;
  683. return (1);
  684. }