stm32f1xx_STUperipheralRegisters.c 15 KB

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