stm32f1xx_STUperipheralRegisters.c 15 KB

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