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.
回复
| 有奖活动 | |
|---|---|
| 硬核工程师专属补给计划——填盲盒 | |
| “我踩过的那些坑”主题活动——第002期 | |
| 【EEPW电子工程师创研计划】技术变现通道已开启~ | |
| 发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
| 【EEPW在线】E起听工程师的声音! | |
| 高校联络员开始招募啦!有惊喜!! | |
| 【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
| 送您一块开发板,2025年“我要开发板活动”又开始了! | |
我要赚赏金
