14楼
/** ****************************************************************************** * @file EXTI/EXTI_Config/main.c * @author MCD Application Team * @version V3.5.0 * @date 08-April-2011 * @brief Main program body ****************************************************************************** * @attention * * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. * * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2> ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include "stm32f10x.h" #include "stm32_eval.h" #include <stdio.h> /** @addtogroup STM32F10x_StdPeriph_Examples * @{ */ /** @addtogroup EXTI_Config * @{ */ /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ EXTI_InitTypeDef EXTI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; USART_InitTypeDef USART_InitStructure; USART_ClockInitTypeDef USART_ClockInitStructure; /* Private function prototypes -----------------------------------------------*/ void EXTIkeyS1_Config(void); void EXTIkeyS2_Config(void); void EXTIkeyS3_Config(void); void EXTIkeyS4_Config(void); void RCC_Configuration(void) { RCC_DeInit(); RCC_HSICmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET); RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI); RCC_HSEConfig(RCC_HSE_OFF); RCC_LSEConfig(RCC_LSE_OFF); RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_9); // 72HMz RCC_PLLCmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); RCC_ADCCLKConfig(RCC_PCLK2_Div4); RCC_PCLK2Config(RCC_HCLK_Div1); RCC_PCLK1Config(RCC_HCLK_Div2); RCC_HCLKConfig(RCC_SYSCLK_Div1); RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); while(RCC_GetSYSCLKSource() != 0x08); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_ResetBits(GPIOD,GPIO_Pin_2); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_ResetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7); } void USART_int(long BaudRate) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); /* PA10 USART1_Rx */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); /* USARTx configured as follow: - BaudRate = 115200 baud - Word Length = 8 Bits - One Stop Bit - No parity - Hardware flow control disabled (RTS and CTS signals) - Receive and transmit enabled */ USART_InitStructure.USART_BaudRate = BaudRate;//?????? USART_InitStructure.USART_WordLength = USART_WordLength_8b;//???????8bit USART_InitStructure.USART_StopBits = USART_StopBits_1;//????1 USART_InitStructure.USART_Parity = USART_Parity_No;//???? USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//??????none USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//?????????? USART_ClockInitStructure.USART_Clock = USART_Clock_Disable; USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low; USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge; USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable; USART_ClockInit(USART1, &USART_ClockInitStructure); USART_Init(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); USART_Cmd(USART1, ENABLE); /* Configure four bit for preemption priority */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); /* Enable the USART1 Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; // NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 15; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } /* Private functions ---------------------------------------------------------*/ /** * @brief Main program. * @param None * @retval None */ int main(void) {RCC_Configuration(); /* Configure PA.00 in interrupt mode */ EXTIkeyS1_Config(); /* Configure PB.09 or PG.08 in interrupt mode */ EXTIkeyS2_Config(); EXTIkeyS3_Config(); EXTIkeyS4_Config(); USART_int(115200); printf("Config done,waiting for interrupt......\r\n"); while (1) { } } /** * @brief Configure PA.00 in interrupt mode * @param None * @retval None */ void EXTIkeyS1_Config(void) { /* Enable GPIOA clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); /* Configure PA.00 pin as input floating */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); /* Enable AFIO clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); /* Connect EXTI0 Line to PA.00 pin */ GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource8); /* Configure EXTI0 line */ EXTI_InitStructure.EXTI_Line = EXTI_Line8; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); /* Enable and set EXTI0 Interrupt to the lowest priority */ NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } /** * @brief Configure PB.09 or PG.08 in interrupt mode * @param None * @retval None */ void EXTIkeyS2_Config(void) { /* Enable GPIOB clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); /* Configure PB.09 pin as input floating */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOC, &GPIO_InitStructure); /* Enable AFIO clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); /* Connect EXTI9 Line to PB.09 pin */ GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource9); /* Configure EXTI9 line */ EXTI_InitStructure.EXTI_Line = EXTI_Line9; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); /* Enable and set EXTI9_5 Interrupt to the lowest priority */ NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } void EXTIkeyS3_Config(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource10); EXTI_InitStructure.EXTI_Line = EXTI_Line10; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } void EXTIkeyS4_Config(void) { /* Enable GPIOA clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); /* Configure PA.00 pin as input floating */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); /* Enable AFIO clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); /* Connect EXTI0 Line to PA.00 pin */ GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource11); /* Configure EXTI0 line */ EXTI_InitStructure.EXTI_Line = EXTI_Line11; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); /* Enable and set EXTI0 Interrupt to the lowest priority */ NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } /******************************************************************************/ /* STM32F10x Peripherals Interrupt Handlers */ /******************************************************************************/ /** * @brief This function handles External lines 9 to 5 interrupt request. * @param None * @retval None */ void EXTI15_10_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line9) != RESET) { /* Toggle LED2 */ GPIO_SetBits(GPIOC,GPIO_Pin_6|GPIO_Pin_7); printf("S2 interrupt ......\r\n"); /* Clear the EXTI line 9 pending bit */ EXTI_ClearITPendingBit(EXTI_Line9); } if(EXTI_GetITStatus(EXTI_Line10) != RESET) { /* Toggle LED1 */ GPIO_SetBits(GPIOC,GPIO_Pin_4|GPIO_Pin_5); printf("S1 interrupt ......\r\n"); /* Clear the EXTI line 0 pending bit */ EXTI_ClearITPendingBit(EXTI_Line8); } } void EXTI9_5_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line9) != RESET) { GPIO_SetBits(GPIOC,GPIO_Pin_2|GPIO_Pin_3); printf("S2 interrupt ......\r\n"); EXTI_ClearITPendingBit(EXTI_Line9); } if(EXTI_GetITStatus(EXTI_Line8) != RESET) { GPIO_SetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1); printf("S1 interrupt ......\r\n"); EXTI_ClearITPendingBit(EXTI_Line8); } } #ifdef USE_FULL_ASSERT /** * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred. * @param file: pointer to the source file name * @param line: assert_param error line source number * @retval None */ void assert_failed(uint8_t* file, uint32_t line) { /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* Infinite loop */ while (1) { } } #endif /** * @} */ /** * @} */ #ifdef __GNUC__ /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf set to 'Yes') calls __io_putchar() */ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif /* __GNUC__ */ /** * @brief Retargets the C library printf function to the USART. * @param None * @retval None */ PUTCHAR_PROTOTYPE { /* Place your implementation of fputc here */ /* e.g. write a character to the USART */ USART_SendData(EVAL_COM1, (uint8_t) ch); /* Loop until the end of transmission */ while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET) {} return ch; } #ifdef USE_FULL_ASSERT /** * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred. * @param file: pointer to the source file name * @param line: assert_param error line source number * @retval None */ void assert_failed(uint8_t* file, uint32_t line) { /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* Infinite loop */ while (1) { } } #endif /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****
16楼
view plaincopy to clipboardprint? 01./** 02. ****************************************************************************** 03. * @file GPIO/IOToggle/main.c 04. * @author MCD Application Team 05. * @version V3.5.0 06. * @date 08-April-2011 07. * @brief Main program body. 08. ****************************************************************************** 09. * @attention 10. * 11. * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 12. * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 13. * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 14. * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 15. * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 16. * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 17. * 18. * 19. 20. ? COPYRIGHT 2011 STMicroelectronics 21. 22.****************************************************************************** 23. */ 24. 25./* Includes ------------------------------------------------------------------*/ 26.#include "stm32f10x.h" 27.#include "stm32_eval.h" 28.uint16_t Dis_tab[]={GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_8,//0 29. GPIO_Pin_9|GPIO_Pin_12,//1 30. GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_5,//2 31. GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_5,//3 32. GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_8|GPIO_Pin_5,//4 33. GPIO_Pin_7|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_8|GPIO_Pin_5,//5 34. GPIO_Pin_7|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_8|GPIO_Pin_5,//6 35. GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12,//7 36. GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14,//8 37. GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14//9 38. }; 39.GPIO_InitTypeDef GPIO_InitStructure; 40. 41.void RCC_Configuration(void) 42.{ 43. RCC_DeInit(); 44. RCC_HSICmd(ENABLE); 45. while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET); 46. RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI); 47. 48. RCC_HSEConfig(RCC_HSE_OFF); 49. RCC_LSEConfig(RCC_LSE_OFF); 50. RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_9); // 72HMz 51. RCC_PLLCmd(ENABLE); 52. while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); 53. RCC_ADCCLKConfig(RCC_PCLK2_Div4); 54. RCC_PCLK2Config(RCC_HCLK_Div1); 55. RCC_PCLK1Config(RCC_HCLK_Div2); 56. RCC_HCLKConfig(RCC_SYSCLK_Div1); 57. RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); 58. while(RCC_GetSYSCLKSource() != 0x08); 59. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE); 60. GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG 61. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; 62. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 63. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 64. GPIO_Init(GPIOD, &GPIO_InitStructure); 65. GPIO_ResetBits(GPIOD,GPIO_Pin_2); 66.} 67. 68.void GPIO_INIT() 69.{ 70. //GPIOB(数码管)初始化 71. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); 72. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; 73. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 74. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 75. GPIO_Init(GPIOB, &GPIO_InitStructure); 76. 77. //按键初始化 78. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); 79. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11; 80. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 81. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 82. GPIO_Init(GPIOC, &GPIO_InitStructure); 83.} 84.//微秒延时 85.void delay_us(u32 n) 86.{ 87. u8 j; 88. while(n--) 89. for(j=0;j<10;j++); 90.} 91.//毫秒延时 92.void delay_ms(u32 n) 93.{ 94. while(n--) 95. delay_us(1000); 96.} 97. 98. 99./** 100. * @brief Main program. 101. * @param None 102. * @retval None 103. */ 104. 105.int main(void) 106.{ 107. int i,j; 108. RCC_Configuration(); 109. GPIO_INIT(); 110. GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);//关闭数码管 111. while(1){ 112. if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_10)) 113. {delay_ms(80); 114. if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_10)){j++;}} 115. if(j%2==0){ 116. if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_9)) 117. {delay_ms(80); 118. if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_9)){i++;} 119. }} 120. else{ 121. if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8))//S1键按下 122. {delay_ms(80); 123. if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8)){i++;}} 124. }//延时后S1处于按下状态,j++ 125. if(i>30){i=0;} 126. GPIO_ResetBits(GPIOB,GPIO_Pin_1); 127. GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14); 128. switch(i){ 129. case 0 : 130. GPIO_SetBits(GPIOB,GPIO_Pin_1); 131. GPIO_ResetBits(GPIOB,Dis_tab[i%10]); 132. break; 133. case 1 : 134. GPIO_SetBits(GPIOB,GPIO_Pin_1); 135. GPIO_ResetBits(GPIOB,Dis_tab[i%10]); 136. break; 137. case 2 : 138. GPIO_SetBits(GPIOB,GPIO_Pin_1); 139. GPIO_ResetBits(GPIOB,Dis_tab[i%10]); 140. break; 141. case 3 : 142. GPIO_SetBits(GPIOB,GPIO_Pin_1); 143. GPIO_ResetBits(GPIOB,Dis_tab[i%10]); 144. break; 145. case 4 : 146. GPIO_SetBits(GPIOB,GPIO_Pin_1); 147. GPIO_ResetBits(GPIOB,Dis_tab[i%10]); 148. break; 149. case 5 : 150. GPIO_SetBits(GPIOB,GPIO_Pin_1); 151. GPIO_ResetBits(GPIOB,Dis_tab[i%10]); 152. break; 153. case 6 : 154. GPIO_SetBits(GPIOB,GPIO_Pin_1); 155. GPIO_ResetBits(GPIOB,Dis_tab[i%10]); 156. break; 157. case 7 : 158. GPIO_SetBits(GPIOB,GPIO_Pin_1); 159. GPIO_ResetBits(GPIOB,Dis_tab[i%10]); 160. break; 161. case 8 : 162. GPIO_SetBits(GPIOB,GPIO_Pin_1); 163. GPIO_ResetBits(GPIOB,Dis_tab[i%10]); 164. break; 165. case 9 : 166. GPIO_SetBits(GPIOB,GPIO_Pin_1); 167. GPIO_ResetBits(GPIOB,Dis_tab[i%10]); 168. break; 169. case 10 : 170. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off 171. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on 172. GPIO_ResetBits(GPIOB,Dis_tab[i%10]); 173. delay_ms(1); 174. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off 175. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off 176. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on 177. delay_ms(1); 178. GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12); 179. delay_ms(1); 180. 181. break; 182. case 11 : 183. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off 184. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on 185. GPIO_ResetBits(GPIOB,Dis_tab[i%10]); 186. delay_ms(1); 187. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off 188. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off 189. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on 190. delay_ms(1); 191. GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12); 192. delay_ms(1); 193. break; 194. case 12 : 195. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off 196. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on 197. GPIO_ResetBits(GPIOB,Dis_tab[i%10]); 198. delay_ms(1); 199. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off 200. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off 201. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on 202. delay_ms(1); 203. GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12); 204. delay_ms(1); 205. break; 206. 207. case 13: 208. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off 209. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on 210. GPIO_ResetBits(GPIOB,Dis_tab[i%10]); 211. delay_ms(1); 212. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off 213. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off 214. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on 215. delay_ms(1); 216. GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12); 217. delay_ms(1); 218. break; 219. 220. 221. case 14: 222. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off 223. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on 224. GPIO_ResetBits(GPIOB,Dis_tab[i%10]); 225. delay_ms(1); 226. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off 227. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off 228. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on 229. delay_ms(1); 230. GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12); 231. delay_ms(1); 232. break; 233. case 15: 234. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off 235. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on 236. GPIO_ResetBits(GPIOB,Dis_tab[i%10]); 237. delay_ms(1); 238. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off 239. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off 240. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on 241. delay_ms(1); 242. GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12); 243. delay_ms(1); 244. break; 245. case 16: 246. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off 247. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on 248. GPIO_ResetBits(GPIOB,Dis_tab[i%10]); 249. delay_ms(1); 250. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off 251. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off 252. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on 253. delay_ms(1); 254. GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12); 255. delay_ms(1); 256. break; 257. case 17: 258. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off 259. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on 260. GPIO_ResetBits(GPIOB,Dis_tab[i%10]); 261. delay_ms(1); 262. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off 263. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off 264. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on 265. delay_ms(1); 266. GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12); 267. delay_ms(1); 268. break; 269. case 18: 270. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off 271. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on 272. GPIO_ResetBits(GPIOB,Dis_tab[i%10]); 273. delay_ms(1); 274. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off 275. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off 276. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on 277. delay_ms(1); 278. GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12); 279. delay_ms(1); 280. break; case 19: 281. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off 282. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on 283. GPIO_ResetBits(GPIOB,Dis_tab[i%10]); 284. delay_ms(1); 285. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off 286. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off 287. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on 288. delay_ms(1); 289. GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12); 290. delay_ms(1); 291. break; 292. case 20: 293. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off 294. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on 295. GPIO_ResetBits(GPIOB,Dis_tab[i%10]); 296. delay_ms(1); 297. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off 298. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off 299. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on 300. delay_ms(1); 301. GPIO_ResetBits(GPIOB,Dis_tab[i/10]); 302. delay_ms(1); 303. break; 304. case 21: 305. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off 306. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on 307. GPIO_ResetBits(GPIOB,Dis_tab[i%10]); 308. delay_ms(1); 309. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off 310. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off 311. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on 312. delay_ms(1); 313. GPIO_ResetBits(GPIOB,Dis_tab[i/10]); 314. delay_ms(1); 315. break; 316. case 22: 317. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off 318. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on 319. GPIO_ResetBits(GPIOB,Dis_tab[i%10]); 320. delay_ms(1); 321. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off 322. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off 323. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on 324. delay_ms(1); 325. GPIO_ResetBits(GPIOB,Dis_tab[i/10]); 326. delay_ms(1); 327. break; 328. case 23: 329. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off 330. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on 331. GPIO_ResetBits(GPIOB,Dis_tab[i%10]); 332. delay_ms(1); 333. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off 334. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off 335. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on 336. delay_ms(1); 337. GPIO_ResetBits(GPIOB,Dis_tab[i/10]); 338. delay_ms(1); 339. break; 340. case 24: 341. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off 342. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on 343. GPIO_ResetBits(GPIOB,Dis_tab[i%10]); 344. delay_ms(1); 345. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off 346. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off 347. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on 348. delay_ms(1); 349. GPIO_ResetBits(GPIOB,Dis_tab[i/10]); 350. delay_ms(1); 351. break; 352. 353. case 25: 354. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off 355. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on 356. GPIO_ResetBits(GPIOB,Dis_tab[i%10]); 357. delay_ms(1); 358. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off 359. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off 360. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on 361. delay_ms(1); 362. GPIO_ResetBits(GPIOB,Dis_tab[i/10]); 363. delay_ms(1); 364. break; 365. 366. case 26: 367. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off 368. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on 369. GPIO_ResetBits(GPIOB,Dis_tab[i%10]); 370. delay_ms(1); 371. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off 372. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off 373. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on 374. delay_ms(1); 375. GPIO_ResetBits(GPIOB,Dis_tab[i/10]); 376. delay_ms(1); 377. break; 378. case 27: 379. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off 380. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on 381. GPIO_ResetBits(GPIOB,Dis_tab[i%10]); 382. delay_ms(1); 383. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off 384. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off 385. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on 386. delay_ms(1); 387. GPIO_ResetBits(GPIOB,Dis_tab[i/10]); 388. delay_ms(1); 389. break; 390. case 28: 391. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off 392. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on 393. GPIO_ResetBits(GPIOB,Dis_tab[i%10]); 394. delay_ms(1); 395. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off 396. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off 397. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on 398. delay_ms(1); 399. GPIO_ResetBits(GPIOB,Dis_tab[i/10]); 400. delay_ms(1); 401. break; 402. case 29: 403. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off 404. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on 405. GPIO_ResetBits(GPIOB,Dis_tab[i%10]); 406. delay_ms(1); 407. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off 408. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off 409. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on 410. delay_ms(1); 411. GPIO_ResetBits(GPIOB,Dis_tab[i/10]); 412. delay_ms(1); 413. break; 414. case 30: 415. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off 416. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on 417. GPIO_ResetBits(GPIOB,Dis_tab[i%10]); 418. delay_ms(1); 419. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off 420. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off 421. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on 422. delay_ms(1); 423. GPIO_ResetBits(GPIOB,Dis_tab[i/10]); 424. delay_ms(1); 425. break; 426. } 427. 428. } 429.}
18楼
01.#include "stm32f10x.h" 02.#include "stm32_eval.h" 03.#include <stdio.h> 04.#define VREF 3.3 05.GPIO_InitTypeDef GPIO_InitStructure; 06.USART_InitTypeDef USART_InitStructure; 07.USART_ClockInitTypeDef USART_ClockInitStructure; 08.int volt; 09.unsigned int temp0,temp1,temp2; 10.void RCC_Configuration(void) 11.{/* 12. RCC_DeInit(); 13. 14. RCC_HSICmd(ENABLE); 15. while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET); 16. 17. RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI); 18. 19. RCC_HSEConfig(RCC_HSE_OFF); 20. RCC_LSEConfig(RCC_LSE_OFF); 21. RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_9); // 72HMz 22. RCC_PLLCmd(ENABLE); 23. while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); 24. RCC_ADCCLKConfig(RCC_PCLK2_Div4); 25. RCC_PCLK2Config(RCC_HCLK_Div1); 26. RCC_PCLK1Config(RCC_HCLK_Div2); 27. RCC_HCLKConfig(RCC_SYSCLK_Div1); 28. RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); 29. while(RCC_GetSYSCLKSource() != 0x08); 30.*/ 31. SystemInit(); 32. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE); 33. GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG 34.RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE); 35. GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG 36. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; 37. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 38. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 39. GPIO_Init(GPIOD, &GPIO_InitStructure); 40. GPIO_ResetBits(GPIOD,GPIO_Pin_2); 41. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE); 42. GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG 43. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; 44. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 45. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 46. GPIO_Init(GPIOC, &GPIO_InitStructure); 47. GPIO_SetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7); 48. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); 49.} 50. 51.void USART_int(long BaudRate) 52.{ 53. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE); 54. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; 55. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; 56. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 57. GPIO_Init(GPIOA, &GPIO_InitStructure); 58. /* PA10 USART1_Rx */ 59. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; 60. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 61. GPIO_Init(GPIOA, &GPIO_InitStructure); 62. /* USARTx configured as follow: 63. - BaudRate = 115200 baud 64. - Word Length = 8 Bits 65. - One Stop Bit 66. - No parity 67. - Hardware flow control disabled (RTS and CTS signals) 68. - Receive and transmit enabled 69. */ 70. USART_InitStructure.USART_BaudRate = BaudRate;//?????? 71. USART_InitStructure.USART_WordLength = USART_WordLength_8b;//???????8bit 72. USART_InitStructure.USART_StopBits = USART_StopBits_1;//????1 73. USART_InitStructure.USART_Parity = USART_Parity_No;//???? 74. USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//??????none 75. USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//?????????? 76. USART_ClockInitStructure.USART_Clock = USART_Clock_Disable; 77. USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low; 78. USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge; 79. USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable; 80. USART_ClockInit(USART1, &USART_ClockInitStructure); 81. USART_Init(USART1, &USART_InitStructure); 82. USART_Cmd(USART1, ENABLE); 83. USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); 84. USART_Cmd(USART1, ENABLE); 85.} 86.void delay_us(u32 n) 87.{ 88. u8 j; 89. while(n--) 90. for(j=0;j<10;j++); 91.} 92.void delay_ms(u32 n) 93.{ 94. while(n--) 95. delay_us(2000); 96.} 97.void PWM_Config() 98.{ 99. uint16_t PrescalerValue = 0; 100. TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; 101. TIM_OCInitTypeDef TIM_OCInitStructure; 102. /* TIM2 clock enable */ 103. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); 104. /* GPIOA enable */ 105. RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); 106. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;//PWM&RGB- PA1 PA2 PA3 107. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 108. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 109. GPIO_Init(GPIOA, &GPIO_InitStructure); 110. TIM_Cmd(TIM2, ENABLE); 111. /* Compute the prescaler value */ 112. PrescalerValue = (uint16_t) (SystemCoreClock / 24000000) - 1; 113. /* Time base configuration */ 114. TIM_TimeBaseStructure.TIM_Period = 0x07FF; 115. TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue; 116. TIM_TimeBaseStructure.TIM_ClockDivision = 0; 117. TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 118. TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); 119. TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; 120. TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 121. /* PWM1 Mode configuration: Channel2 ,PA1在通道2*/ 122. TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 123. TIM_OCInitStructure.TIM_Pulse = 0xFFFF; 124. TIM_OC2Init(TIM2, &TIM_OCInitStructure); 125. /* PWM1 Mode configuration: Channel3 PA2在通道3*/ 126. TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 127. TIM_OCInitStructure.TIM_Pulse = 0xFFFF; 128. TIM_OC3Init(TIM2, &TIM_OCInitStructure); 129. /* PWM1 Mode configuration: Channel4 PA3在通道4*/ 130. TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 131. TIM_OCInitStructure.TIM_Pulse = 0xFFFF; 132. TIM_OC4Init(TIM2, &TIM_OCInitStructure); 133. TIM_ARRPreloadConfig(TIM2, ENABLE); 134.} 135.void ADC_CONFIG(){ 136. ADC_InitTypeDef ADC_InitStructure; 137. #if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) 138. /* ADCCLK = PCLK2/2 */ 139. RCC_ADCCLKConfig(RCC_PCLK2_Div2); 140.#else 141. /* ADCCLK = PCLK2/4 */ 142. RCC_ADCCLKConfig(RCC_PCLK2_Div4); 143.#endif 144.ADC_DeInit(ADC1); 145. /* Enable ADC1 and GPIOC clock */ 146. RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOB, ENABLE); 147. /* Configure PB0 (ADC Channel14) as analog input -------------------------*/ 148. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//ADC所在端口PB0 149. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//模拟输入模式 150. GPIO_Init(GPIOB, &GPIO_InitStructure); 151. /* ADC1 configuration ------------------------------------------------------*/ 152. ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; 153. ADC_InitStructure.ADC_ScanConvMode = ENABLE; 154. ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; 155. ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; 156. ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//ADC数据右对齐 157. ADC_InitStructure.ADC_NbrOfChannel = 1;//ADC通道数为1 158. ADC_Init(ADC1, &ADC_InitStructure);//初始化ADC1 159. /* Enable ADC1 DMA */ 160. ADC_DMACmd(ADC1, ENABLE); 161. /* Enable ADC1 */ 162. ADC_Cmd(ADC1, ENABLE); 163.} 164. 165.int Get_ADC(){ 166. /* ADC1 regular channel configuration */ 167. ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 1, ADC_SampleTime_55Cycles5);//通道:8 ,采样时间 168. /* Enable ADC1 reset calibration register */ 169. ADC_ResetCalibration(ADC1);//重置ADC1的校准寄存器 170. /* Check the end of ADC1 reset calibration register */ 171. while(ADC_GetResetCalibrationStatus(ADC1));//确认重置完毕 172. /* Start ADC1 calibration */ 173. ADC_StartCalibration(ADC1);//开始ADC1校准 174. /* Check the end of ADC1 calibration */ 175. while(ADC_GetCalibrationStatus(ADC1));//确认校准完毕 176. /* Start ADC1 Software Conversion */ 177. ADC_SoftwareStartConvCmd(ADC1, ENABLE);//使能ADC1软件转换功能 178. return ADC_GetConversionValue(ADC1); 179.} 180.void colour(int z) 181.{ 182. switch(z)//????????? 183. 184. { 185. case 0 : temp0=volt,temp1=0,temp2=volt; break; 186. case 1 : temp0=0,temp1=volt,temp2=volt; break; 187. case 2 : temp0=volt,temp1=volt,temp2=0; break; 188. 189. } 190.} 191. 192.void PWM_TEST() 193.{ 194. int i=0; 195. for(i=0;i<3;i++) 196. { 197. colour(i); //temp1-Red,temp2-Green,temp0-Blue 198. TIM_SetCompare2(TIM2,temp0);delay_ms(2000); 199. TIM_SetCompare3(TIM2,temp1);delay_ms(1000); 200. TIM_SetCompare4(TIM2,temp2);delay_ms(2000); 201. 202. } 203.} 204.int main(void) 205.{ 206. float Volt=0.00; 207. int ADValue = 0; 208. RCC_Configuration(); 209. USART_int(115200); 210. ADC_CONFIG(); 211. Get_ADC(); 212. PWM_Config(); 213. delay_ms(1000); 214. printf(" config done...\r\n"); 215. while(1) 216. { 217. ADValue = Get_ADC(); 218. Volt = VREF*ADValue/4095; 219. /*volt的值由Volt直接决定 volt是Volt乘以1000的整型值*/ 220. volt=Volt*1000; 221. printf("===============================\r\n"); 222. printf("The ADC value is:%d\r\n",ADValue); 223. printf("The Volt is:%f V\r\n",Volt); 224. printf("The volt is:%d \r\n",volt); 225. PWM_TEST(); 226. delay_ms(500); 227. } 228.} 229. 230.#ifdef USE_FULL_ASSERT 231. 232.void assert_failed(uint8_t* file, uint32_t line) 233.{ 234. while (1) 235. { 236. } 237.} 238. 239.#endif 240. 241.#ifdef __GNUC__ 242. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) 243.#else 244. #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) 245.#endif /* __GNUC__ */ 246. 247.PUTCHAR_PROTOTYPE 248.{ 249. 250. USART_SendData(EVAL_COM1, (uint8_t) ch); 251. while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET) 252. {} 253. 254. return ch; 255.} 256. 257.#ifdef USE_FULL_ASSERT 258. 259.void assert_failed(uint8_t* file, uint32_t line) 260.{ 261. while (1) 262. { 263. } 264.}
19楼
#include "stm32f10x.h" #include "stm32_eval.h" #include #define VREF 3.3 GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; USART_ClockInitTypeDef USART_ClockInitStructure; void delay_us(u32 n) { u8 j; while(n--) for(j=0;j<10;j++); } void delay_ms(u32 n) { while(n--) delay_us(1000); } void RCC_Configuration(void) { SystemInit(); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_ResetBits(GPIOD,GPIO_Pin_2); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_SetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); } void USART_int(long BaudRate) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); /* PA10 USART1_Rx */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); USART_InitStructure.USART_BaudRate = BaudRate;//?????? USART_InitStructure.USART_WordLength = USART_WordLength_8b;//???????8bit USART_InitStructure.USART_StopBits = USART_StopBits_1;//????1 USART_InitStructure.USART_Parity = USART_Parity_No;//???? USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//??????none USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//?????????? USART_ClockInitStructure.USART_Clock = USART_Clock_Disable; USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low; USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge; USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable; USART_ClockInit(USART1, &USART_ClockInitStructure); USART_Init(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); USART_Cmd(USART1, ENABLE); } void PWM_Config() {uint16_t PrescalerValue = 0;//预分频器值 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; /* TIM2 clock enable */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); /* GPIOA enable */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO , ENABLE);//使能复用功能时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); TIM_Cmd(TIM2, ENABLE);//TIM2使能 /* Compute the prescaler value */ PrescalerValue = (uint16_t) (SystemCoreClock / 24000000) - 1; /* Time base configuration */ TIM_TimeBaseStructure.TIM_Period = 0x07FF;//设置自动重装载 TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;//设置预分频值 TIM_TimeBaseStructure.TIM_ClockDivision = 0;//设置时钟分割TDTS=Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);//根据指定参数初始化TIMx TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//选择PWM模式1 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//输出极性高 /* PWM1 Mode configuration: Channel2 */ TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 0xFFFF;//通道占空比时间 TIM_OC2Init(TIM2, &TIM_OCInitStructure);//初始化TIM2 OC2 /* PWM1 Mode configuration: Channel3 */ TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//比较输出使能 TIM_OCInitStructure.TIM_Pulse = 0xFFFF;//通道占空比时间 TIM_OC3Init(TIM2, &TIM_OCInitStructure);//初始化TIM2 OC3 /* PWM1 Mode configuration: Channel4 */ TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 0xFFFF;//通道占空比时间 TIM_OC4Init(TIM2, &TIM_OCInitStructure);//初始化TIM2 OC4 TIM_ARRPreloadConfig(TIM2, ENABLE);//使能预装载寄存器 } void PWM_TEST() { unsigned int temp0,temp1,temp2; printf("PWM-RGB TEST......\r\n"); while(1) { if(temp0=500,temp1=0,temp2=2047) {TIM_SetCompare2(TIM2,temp0);delay_ms(400); TIM_SetCompare3(TIM2,temp1);delay_ms(400); TIM_SetCompare4(TIM2,temp2);delay_ms(400); } if(temp0=1500,temp1=0,temp2=0) {TIM_SetCompare2(TIM2,temp0);delay_ms(400); TIM_SetCompare3(TIM2,temp1);delay_ms(400); TIM_SetCompare4(TIM2,temp2);delay_ms(400); } if(temp0=1760,temp1=380,temp2=0) {TIM_SetCompare2(TIM2,temp0);delay_ms(400); TIM_SetCompare3(TIM2,temp1);delay_ms(400); TIM_SetCompare4(TIM2,temp2);delay_ms(400); } if(temp0=970,temp1=2047,temp2=0) {TIM_SetCompare2(TIM2,temp0);delay_ms(400); TIM_SetCompare3(TIM2,temp1);delay_ms(400); TIM_SetCompare4(TIM2,temp2);delay_ms(400); } if(temp0=500,temp1=250,temp2=1750) {TIM_SetCompare2(TIM2,temp0);delay_ms(400); TIM_SetCompare3(TIM2,temp1);delay_ms(400); TIM_SetCompare4(TIM2,temp2);delay_ms(400); } if(temp0=500,temp1=1500,temp2=1000) {TIM_SetCompare2(TIM2,temp0);delay_ms(400); TIM_SetCompare3(TIM2,temp1);delay_ms(400); TIM_SetCompare4(TIM2,temp2);delay_ms(400); } if(temp0=1250,temp1=750,temp2=1250) {TIM_SetCompare2(TIM2,temp0);delay_ms(400); TIM_SetCompare3(TIM2,temp1);delay_ms(400); TIM_SetCompare4(TIM2,temp2);delay_ms(400); } } int main(void) { RCC_Configuration(); USART_int(115200); printf(" config done...\r\n"); PWM_Config(); delay_ms(1000); while(1) { PWM_TEST(); } } #ifdef USE_FULL_ASSERT void assert_failed(uint8_t* file, uint32_t line) {while (1) { } } #endif #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif /* __GNUC__ */ PUTCHAR_PROTOTYPE { USART_SendData(EVAL_COM1, (uint8_t) ch); void assert_failed(uint8_t* file, uint32_t line) { while (1) { } } #endif
20楼
#include "stm32f10x.h" 27.#include "stm32_eval.h" 28.#include "delay.h" 29.#include 30.volatile int flag; 31.#define Set_B20() GPIO_SetBits(GPIOC, GPIO_Pin_12) //上拉关闭PC12 32.#define Reset_B20() GPIO_ResetBits(GPIOC, GPIO_Pin_12) //下拉打开PC12 33.#define Read_B20() GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_12) //读PC12状态 34.unsigned char Error_Flag=0; 35.unsigned char zf=0; 36.void SysTick_Configuration(void) 37.{ 38. /* Setup SysTick Timer for 10 msec interrupts */ 39. if (SysTick_Config(48000)) //SysTick配置 40. { 41. /* Capture error */ 42. while (1); 43. } 44. /* Configure the SysTick handler priority */ 45. NVIC_SetPriority(SysTick_IRQn, 0x0); //SysTick中断优先级 46.} 47. 48. 49./** @addtogroup STM32F10x_StdPeriph_Examples 50. * @{ 51. */ 52. 53./** @addtogroup EXTI_Config 54. * @{ 55. */ 56. 57./* Private typedef -----------------------------------------------------------*/ 58./* Private define ------------------------------------------------------------*/ 59./* Private macro -------------------------------------------------------------*/ 60./* Private variables ---------------------------------------------------------*/ 61.GPIO_InitTypeDef GPIO_InitStructure; 62.USART_InitTypeDef USART_InitStructure; 63.USART_ClockInitTypeDef USART_ClockInitStructure; 64. 65.void RCC_Configuration(void) 66.{ 67. RCC_DeInit(); //将外设RCC重新设为缺省值 68. 69. RCC_HSICmd(ENABLE); //使能内部高速晶振 70. while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET); //当SHI晶振就绪则重新设定 71. 72. RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI); //设置系统时钟,选择SHI时钟为系统时钟 73. 74. RCC_HSEConfig(RCC_HSE_OFF); //设置外部高速晶振,HSE晶振OFF 75. RCC_LSEConfig(RCC_LSE_OFF); //设置外部低速晶振,LSE晶振OFF 76. 77. //******配置PLL时钟频率为48MHZ*******// 78. 79. RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_8); //RCC_PLLMul_x 即设置PLL时钟频率为 6*x MHz 80. 81. //************************************// 82. 83. RCC_PLLCmd(ENABLE); ////*******************使能PLL 84. while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //PLL就绪 85. RCC_ADCCLKConfig(RCC_PCLK2_Div4); // ADC时钟=PCLK/2 86. RCC_PCLK2Config(RCC_HCLK_Div1); // APB2时钟=HCLK 87. RCC_PCLK1Config(RCC_HCLK_Div2); /// APB1时钟=HCLK/2 88. RCC_HCLKConfig(RCC_SYSCLK_Div1); // AHB时钟=系统时钟 89. RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); // 选择PLL为系统时钟 90. while(RCC_GetSYSCLKSource() != 0x08); //当PLL不是系统时钟 91. 92. 93.// SystemInit(); 94. 95. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE); //使能APB2外设时钟/****GPIOD时钟和功能复用IO时钟***/ 96. GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG SW_DP使能 97.RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE); 98. GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG 99. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; // //选择设置GPIO管脚 100. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; ////设置管脚速率 101. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; ////设置管脚工作状态,此为推挽输出 102. GPIO_Init(GPIOD, &GPIO_InitStructure); //初始化GPIOD 103. GPIO_ResetBits(GPIOD,GPIO_Pin_2); //上拉关闭蜂鸣器 104. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE); 105. GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG 106. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;//LED 107. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 108. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 109. GPIO_Init(GPIOC, &GPIO_InitStructure); 110. GPIO_SetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7); 111. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //使能TIM2时钟 112.} 113. 114.void USART_int(long BaudRate) 115.{ 116. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);//使能GPIOA、USART1外设时钟 117. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; 118. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 119. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 120. GPIO_Init(GPIOA, &GPIO_InitStructure); 121. /* PA10 USART1_Rx */ 122. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; 123. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 124. GPIO_Init(GPIOA, &GPIO_InitStructure); 125. /* USARTx configured as follow: 126. - BaudRate = 115200 baud 127. - Word Length = 8 Bits 128. - One Stop Bit 129. - No parity 130. - Hardware flow control disabled (RTS and CTS signals) 131. - Receive and transmit enabled 132. */ 133. USART_InitStructure.USART_BaudRate = BaudRate;//设置USART传输波特率 BaudRate = 9600 可以直接写9600 134. USART_InitStructure.USART_WordLength = USART_WordLength_8b;//一帧传输或者接收的数据位数为8bit 135. USART_InitStructure.USART_StopBits = USART_StopBits_1;//在帧结尾传输一个停止位 136. USART_InitStructure.USART_Parity = USART_Parity_No;//奇偶模式失能 137. USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//硬件流控制失能 138. USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//使能接收发模式 139. USART_ClockInitStructure.USART_Clock = USART_Clock_Disable; //时钟低电平活动 140. USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low; //引脚时钟输出低电平时钟 141. USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge; //第二个时钟边沿开始捕获数据 142. USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;//最后一位数据的时钟脉冲不从SCLK输出 143. USART_ClockInit(USART1, &USART_ClockInitStructure); 144. USART_Init(USART1, &USART_InitStructure);//USART1初始化 145. USART_Cmd(USART1, ENABLE);//使能USART1时钟外设 146. USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//使能接受中断 147. USART_Cmd(USART1, ENABLE); 148.} 149. 150.void delay_18b20(u32 nus) //18b20按照严格的时序工作,这是专属延时 151.{ 152. u16 i; 153. while(nus--) 154. for(i=12;i>0;i--); 155.} 156. 157. 158. 159.void Init18B20(void) //18B20初始化 160.{ 161. u8 aa=0; 162. u8 count =0; 163. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//使能PC时钟 164. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; 165. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;//开漏输出 166. GPIO_Init(GPIOC, &GPIO_InitStructure); 167. Set_B20() ; // GPIO_SetBits(GPIOC, GPIO_Pin_12) 168. delay_18b20(1); 169. Reset_B20(); 170. 171. delay_18b20(480); 172. Set_B20(); 173.// delay_18b20(500); 174. delay_18b20(480); 175. 176. count=0; 177. aa=Read_B20(); //温度读取 178. /****个人认为限制温度不超过99度,作为一个保护*/ 179. while(!aa && count<100) 180. { 181. aa=Read_B20(); 182. count++; //相当一个for()和while结合 183. } 184. if(count>=99) 185. Error_Flag=1; 186. else 187. Error_Flag=0; 188. 189.} 190. 191.unsigned char Read18B20(void)//按位读取数据 192.{ 193.unsigned char i=0; 194.unsigned char date=0; 195.u8 tempp; 196. for(i=8;i>0;i--) 197. { 198. 199. Reset_B20(); //打开PC12 200. date>>=1; //标志右移一位 201. delay_18b20(1); 202. Set_B20(); //关闭 203. delay_18b20(1); 204. tempp=Read_B20(); //读取温度 205. 206. if(tempp) 207. date|=0x80; // 1000 0000 将最高位填1 ,然后右移,每次最高位由0变1,使8位全部传递完毕 0xff = 1111 1111 208. delay_18b20(60); 209. } 210. return(date); 211.} 212.void Write18B20(unsigned char date)//写数据 213.{ 214. unsigned char i=0; 215. 216. for (i=8; i>0; i--) 217. { 218. Reset_B20(); 219. delay_18b20(1); 220. if(date & 0x01) 221. { 222. Set_B20(); 223. } 224. else 225. { Reset_B20();} 226. delay_18b20(60); 227. date>>=1; 228. Set_B20(); 229. delay_18b20(1); 230. 231. } 232. delay_18b20(15); 233.} 234. 235. float Read_T()//读温度 236.{ 237. unsigned char TUp,TDown; 238. unsigned char fTemp; 239. u8 TT=0; 240. 241. float Temp = 0; 242. Init18B20(); 243. Write18B20(0xcc); 244. Write18B20(0x44); 245. Init18B20(); 246. Write18B20(0xcc); 247. Write18B20(0xbe); 248. TDown = Read18B20(); 249. TUp = Read18B20(); 250. 251. if(TUp>0x7f) 252. { 253. TDown=~TDown; 254. TUp=~TUp+1; 255. TUp/=8; 256. zf=1; 257. } 258. else 259. zf=0; 260. 261. fTemp=TDown&0x0f; 262. TUp<<=4; 263. TDown>>=4; 264. TT=TUp|TDown; 265. Temp=TT+(float)fTemp/16; 266. return(Temp); 267.} 268. 269.int main(void) 270.{ 271. 272. /*!< At this stage the microcontroller clock setting is already configured, 273. this is done through SystemInit() function which is called from startup 274. file (startup_stm32f10x_xx.s) before to branch to application main. 275. To reconfigure the default setting of SystemInit() function, refer to 276. system_stm32f10x.c file 277. */ 278. 279. /* System Clocks Configuration */ 280. char ID[8]; 281. int i; 282. RCC_Configuration(); 283. USART_int(115200); 284. SysTick_Configuration(); 285. printf(" config done...\r\n"); 286. delay_ms(1000); 287. 288. Init18B20(); //初始化 289. Write18B20(0x33); //写入读取地址的命令 290. delay_18b20(20); 291. for(i=0;i<8;i++) //这里必须用for不然 只会输出printf("event 1 oc......\r\n")这句,不会继续运行 292. { 293. ID[i] = Read18B20();//读取地址 294. } 295. 296. while(1) 297. { 298. if(flag == 300) 299. { 300. printf("At the moment of ID is:") ; 301. for(i=0;i<8;i++) //字符不能直接输出,要按位输出 302. { 303. printf("%u",ID[i]);//输出地址 304. } 305. printf("\r\n") ; 306. } 307. if(flag == 500) 308. { 309. printf("The Temperature is:%f\r\n",Read_T());//读取温度并输出 310. printf("===================================================\r\n"); 311. } 312. } 313.} 314. 315. 316. 317.#ifdef USE_FULL_ASSERT 318. 319./** 320. * @brief Reports the name of the source file and the source line number 321. * where the assert_param error has occurred. 322. * @param file: pointer to the source file name 323. * @param line: assert_param error line source number 324. * @retval None 325. */ 326.void assert_failed(uint8_t* file, uint32_t line) 327.{ 328. /* User can add his own implementation to report the file name and line number, 329. ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ 330. 331. /* Infinite loop */ 332. while (1) 333. { 334. } 335.} 336. 337.#endif 338. 339./** 340. * @} 341. */ 342. 343./** 344. * @} 345. */ 346. 347.#ifdef __GNUC__ 348. /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf 349. set to 'Yes') calls __io_putchar() */ 350. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) 351.#else 352. #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) 353.#endif /* __GNUC__ */ 354. 355. 356. 357./** 358. * @brief Retargets the C library printf function to the USART. 359. * @param None 360. * @retval None 361. */ 362.PUTCHAR_PROTOTYPE 363.{ 364. /* Place your implementation of fputc here */ 365. /* e.g. write a character to the USART */ 366. USART_SendData(EVAL_COM1, (uint8_t) ch); 367. 368. /* Loop until the end of transmission */ 369. while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET) 370. {} 371. 372. return ch; 373.} 374. 375.#ifdef USE_FULL_ASSERT 376. 377./** 378. * @brief Reports the name of the source file and the source line number 379. * where the assert_param error has occurred. 380. * @param file: pointer to the source file name 381. * @param line: assert_param error line source number 382. * @retval None 383. */ 384.void assert_failed(uint8_t* file, uint32_t line) 385.{ 386. /* User can add his own implementation to report the file name and line number, 387. ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ 388. 389. /* Infinite loop */ 390. while (1) 391. { 392. } 393.} 394. 395.#endif 396.
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |