1. /*******************************************************************************
  2. 编译环境: EWARM V5.30
  3. 硬件环境: DZY2.PCB
  4. STM32 FW: V3.0.0
  5. 作者 : szlihongtao
  6. ******************************************************************************
  7. REV : V1.00
  8. DATE : 2011-04-18
  9. NOTE :
  10. *******************************************************************************/
  11. #include "stm32f10x.h"
  12. #include "stm32_m.h"
  13. #include "dzy.h"
  14. #include "myRCC.h"
  15. //******************************************************************************
  16. #define TIM1_CCR3_Address 0x40012C3C
  17.  
  18. bit f_tb; // 基本定时标志
  19. bit f_100ms, f_1000ms;
  20. INT16U cnt_test; // 计数器,仅供软件调试使用
  21. float clk_sys; // 仅供软件调试使用
  22. #if 1
  23. uint16_t SRC_Buffer[ ] =
  24. { * }; // 由于载波频率取20kHZ,所以最大脉冲宽度不要超50us,即常数不要超过72*50
  25. #else
  26. uint16_t SRC_Buffer[]=
  27. { *,*,*,*,*,*}; // 由于载波频率取20kHZ,所以最大脉冲宽度不要超50us,即常数不要超过72*50
  28. #endif
  29. //******************************************************************************
  30. // 延时程序,单位为*1ms
  31. //******************************************************************************
  32. void delayms( INT16U cnt )
  33. {
  34. //#define CONST_1MS 7333 // 72MhZ
  35. //#define CONST_1MS 3588 // 32MhZ
  36. #define CONST_1MS (105*FCLK)
  37.  
  38. INT16U i;
  39.  
  40. __no_operation( );
  41. while ( cnt-- )
  42. for ( i = ; i < CONST_1MS; i++ )
  43. ;
  44. }
  45. //******************************************************************************
  46. // pcb上的指示灯
  47. //******************************************************************************
  48. static void led_toggle( void )
  49. {
  50. GPIOC->ODR ^= GPIO_Pin_7; // led2 toogle
  51. GPIOC->ODR ^= GPIO_Pin_6; // led3 toogle
  52. }
  53. //******************************************************************************
  54. // 时钟设置初始化
  55. //******************************************************************************
  56. static void RCC_Configuration( void )
  57. {
  58. ErrorStatus HSEStartUpStatus;
  59. /*
  60. RCC_AdjustHSICalibrationValue 调整内部高速晶振(HSI)校准值
  61. RCC_ITConfig 使能或者失能指定的RCC中断
  62. RCC_ClearFlag 清除RCC的复位标志位
  63. RCC_GetITStatus 检查指定的RCC中断发生与否
  64. RCC_ClearITPendingBit 清除RCC的中断待处理位
  65. */
  66. /* RCC system reset(for debug purpose) */
  67. // 时钟系统复位
  68. RCC_DeInit( );
  69.  
  70. // 使能外部的8M晶振
  71. // 设置外部高速晶振(HSE)
  72. /* Enable HSE */
  73. RCC_HSEConfig( RCC_HSE_ON );
  74.  
  75. // 使能或者失能内部高速晶振(HSI)
  76. RCC_HSICmd( DISABLE );
  77.  
  78. // 等待HSE起振
  79. // 该函数将等待直到HSE就绪,或者在超时的情况下退出
  80. /* Wait till HSE is ready */
  81. HSEStartUpStatus = RCC_WaitForHSEStartUp( );
  82.  
  83. if ( HSEStartUpStatus == SUCCESS )
  84. {
  85. // 设置AHB时钟(HCLK)
  86. RCC_HCLKConfig( RCC_HCLK_Div_ ); // 36 MHz
  87.  
  88. // 设置低速AHB时钟(PCLK1)
  89. RCC_PCLK1Config( RCC_PCLK1_Div_ ); // 2.25 MHz
  90.  
  91. // 设置高速AHB时钟(PCLK2)
  92. RCC_PCLK2Config( RCC_PCLK2_Div_ ); // 2.25 MHz
  93.  
  94. /* ADCCLK = PCLK2/8 */
  95. // 设置ADC时钟(ADCCLK)
  96. RCC_ADCCLKConfig( RCC_ADC_DIV_ ); // 0.281Mhz
  97.  
  98. // 设置USB时钟(USBCLK)
  99. // USB时钟 = PLL时钟除以1.5
  100. //RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5);
  101.  
  102. // 设置外部低速晶振(LSE)
  103. RCC_LSEConfig( RCC_LSE_OFF );
  104.  
  105. // 使能或者失能内部低速晶振(LSI)
  106. // LSE晶振OFF
  107. RCC_LSICmd( DISABLE );
  108.  
  109. // 设置RTC时钟(RTCCLK)
  110. // 选择HSE时钟频率除以128作为RTC时钟
  111. //RCC_RTCCLKConfig(RCC_RTCCLKSource_HSE_Div128);
  112.  
  113. // 使能或者失能RTC时钟
  114. // RTC时钟的新状态
  115. RCC_RTCCLKCmd( DISABLE );
  116.  
  117. /* Flash 2 wait state */
  118. FLASH_SetLatency( FLASH_Latency_2 );
  119.  
  120. /* Enable Prefetch Buffer */
  121. FLASH_PrefetchBufferCmd( FLASH_PrefetchBuffer_Enable );
  122.  
  123. /* PLLCLK = 8MHz * 9 = 72 MHz */
  124. // 设置PLL时钟源及倍频系数
  125. RCC_PLLConfig( RCC_PLLSource_HSE_Div1, RCC_PLLMul_ );
  126.  
  127. /* Enable PLL */
  128. // 使能或者失能PLL
  129. RCC_PLLCmd( ENABLE );
  130.  
  131. /* Wait till PLL is ready */
  132. // 检查指定的RCC标志位设置与否
  133. while ( RCC_GetFlagStatus( RCC_FLAG_PLLRDY ) == RESET )
  134. {
  135. }
  136.  
  137. /* Select PLL as system clock source */
  138. // 设置系统时钟(SYSCLK)
  139. RCC_SYSCLKConfig( RCC_SYSCLKSource_PLLCLK );
  140.  
  141. /* Wait till PLL is used as system clock source */
  142. // 返回用作系统时钟的时钟源
  143. while ( RCC_GetSYSCLKSource( ) != 0x08 )
  144. {
  145. }
  146. }
  147.  
  148. // 使能或者失能AHB外设时钟
  149. RCC_AHBPeriphClockCmd(
  150. RCC_AHBPeriph_DMA1 | RCC_AHBPeriph_DMA2 | RCC_AHBPeriph_SRAM
  151. | RCC_AHBPeriph_FLITF | RCC_AHBPeriph_CRC | RCC_AHBPeriph_FSMC
  152. | RCC_AHBPeriph_SDIO, DISABLE );
  153. // 使能或者失能APB1外设时钟
  154. RCC_APB1PeriphClockCmd( RCC_APB1Periph_ALL, DISABLE );
  155.  
  156. // 强制或者释放高速APB(APB2)外设复位
  157. RCC_APB2PeriphResetCmd( RCC_APB2Periph_ALL, ENABLE );
  158. // 退出复位状态
  159. RCC_APB2PeriphResetCmd( RCC_APB2Periph_ALL, DISABLE );
  160.  
  161. // 强制或者释放低速APB(APB1)外设复位
  162. RCC_APB1PeriphResetCmd( RCC_APB1Periph_ALL, ENABLE );
  163.  
  164. // 强制或者释放后备域复位
  165. RCC_BackupResetCmd( ENABLE );
  166.  
  167. // 使能或者失能时钟安全系统
  168. RCC_ClockSecuritySystemCmd( DISABLE );
  169. }
  170. //******************************************************************************
  171. // NVIC设置
  172. //******************************************************************************
  173. void NVIC_Configuration( void )
  174. {
  175. NVIC_InitTypeDef NVIC_InitStructure;
  176.  
  177. /* Configure one bit for preemption priority */
  178. NVIC_PriorityGroupConfig( NVIC_PriorityGroup_1 );
  179.  
  180. NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;
  181. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = ;
  182. NVIC_InitStructure.NVIC_IRQChannelSubPriority = ;
  183. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  184. //NVIC_Init(&NVIC_InitStructure);
  185.  
  186. NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQn;
  187. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = ;
  188. NVIC_InitStructure.NVIC_IRQChannelSubPriority = ;
  189. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  190. //NVIC_Init(&NVIC_InitStructure);
  191.  
  192. NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel5_IRQn;
  193. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = ;
  194. NVIC_InitStructure.NVIC_IRQChannelSubPriority = ;
  195. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  196. NVIC_Init( &NVIC_InitStructure );
  197. }
  198. //******************************************************************************
  199. // SysTick设置初始化
  200. //******************************************************************************
  201. static void SysTick_Config1( void )
  202. {
  203. #if 1
  204. #define SystemFreq (FCLK*1000000.0) // 单位为Hz
  205. #define TB_SysTick (TIME_TB*1000) // 单位为uS,与示波器实测一致
  206.  
  207. static INT32U ticks;
  208.  
  209. ticks = ( INT32U )( ( TB_SysTick / 1000000.0 ) * SystemFreq );
  210. SysTick_Config( ticks );
  211. #endif
  212. }
  213. //******************************************************************************
  214. // GPIO设置
  215. //******************************************************************************
  216. static void GPIO_Configuration( void )
  217. {
  218. GPIO_InitTypeDef GPIO_InitStructure;
  219.  
  220. RCC_APB2PeriphClockCmd(
  221. RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC
  222. | RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO, ENABLE );
  223.  
  224. //------------------------------------------------------------------------------
  225. GPIO_Write( GPIOA, 0xffff );
  226.  
  227. /* GPIOA Configuration: Channel 3 as alternate function push-pull */
  228. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  229. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  230. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  231. GPIO_Init( GPIOA, &GPIO_InitStructure );
  232.  
  233. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  234. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  235. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  236. // GPIO_Init(GPIOA, &GPIO_InitStructure);
  237.  
  238. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
  239. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  240. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  241. GPIO_Init( GPIOA, &GPIO_InitStructure );
  242. //------------------------------------------------------------------------------
  243.  
  244. GPIO_Write( GPIOB, 0xffff ); // 11111101-11111111
  245.  
  246. /* GPIOB Configuration: Channel 3N as alternate function push-pull */
  247. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
  248. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  249. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  250. GPIO_Init( GPIOB, &GPIO_InitStructure );
  251. //------------------------------------------------------------------------------
  252.  
  253. GPIO_Write( GPIOC, 0xff0f ); // 11111111-00001111
  254.  
  255. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_6 | GPIO_Pin_4
  256. | GPIO_Pin_5;
  257. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  258. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  259. GPIO_Init( GPIOC, &GPIO_InitStructure );
  260. //------------------------------------------------------------------------------
  261. GPIO_Write( GPIOD, 0xffff ); // 11111111-11111111
  262.  
  263. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_2;
  264. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  265. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  266. GPIO_Init( GPIOD, &GPIO_InitStructure );
  267. }
  268. //******************************************************************************
  269. void DMA_Configuration( void )
  270. {
  271. DMA_InitTypeDef DMA_InitStructure;
  272.  
  273. RCC_AHBPeriphClockCmd( RCC_AHBPeriph_DMA1, ENABLE ); // dma1时钟使能
  274.  
  275. DMA_DeInit( DMA1_Channel5 ); // DMA复位
  276. DMA_StructInit( &DMA_InitStructure ); // DMA缺省的参数
  277.  
  278. DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t) TIM1_CCR3_Address; //外设地址
  279. DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t) SRC_Buffer; //内存地址
  280. DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; //dma传输方向,单向
  281. DMA_InitStructure.DMA_BufferSize = sizeof( SRC_Buffer ) / ; //设置DMA在传输时缓冲区的长度
  282. DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //设置DMA的外设递增模式,一个外设
  283. DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //设置DMA的内存递增模式,
  284. DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //外设数据字长
  285. DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //内存数据字长
  286. //循环模式开启,Buffer写满后,自动回到初始地址开始传输
  287. DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //设置DMA的传输模式
  288. DMA_InitStructure.DMA_Priority = DMA_Priority_High; //设置DMA的优先级别
  289. DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //设置DMA的2个memory中的变量互相访问
  290. DMA_Init( DMA1_Channel5, &DMA_InitStructure );
  291.  
  292. DMA_ClearFlag( DMA1_IT_TC5 );
  293. DMA_ITConfig( DMA1_Channel5, DMA_IT_TC, ENABLE );
  294.  
  295. DMA_Cmd( DMA1_Channel5, ENABLE );
  296. }
  297.  
  298. /* TIM1 DMA Transfer example -------------------------------------------------
  299. TIM1CLK = 72 MHz, Prescaler = 0, TIM1 counter clock = 72 MHz
  300. The TIM1 Channel3 is configured to generate a complementary PWM signal with
  301. a frequency equal to: TIM1 counter clock / (TIM1_Period + 1) = 17.57 KHz and
  302. a variable duty cycle that is changed by the DMA after a specific number of
  303. Update DMA request.
  304. The number of this repetitive requests is defined by the TIM1 Repetion counter,
  305. each 3 Update Requests, the TIM1 Channel 3 Duty Cycle changes to the next new
  306. value defined by the SRC_Buffer .
  307. -----------------------------------------------------------------------------*/
  308. //******************************************************************************
  309. void Tim1_Configuration( void )
  310. {
  311. INT16U TIM_Prescaler, TIM_Period;
  312. INT32U utemp;
  313. TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  314. TIM_OCInitTypeDef TIM_OCInitStructure;
  315.  
  316. RCC_APB2PeriphClockCmd( RCC_APB2Periph_TIM1, ENABLE );
  317.  
  318. TIM_DeInit( TIM1 );
  319.  
  320. utemp = ( INT32U )( TIM1CLK * 1000000.0 ) / Freq_PWM;
  321.  
  322. TIM_Prescaler = utemp / ;
  323. ++TIM_Prescaler; // 注意这句话,一定要++
  324.  
  325. utemp = ( INT32U )( TIM1CLK * 1000000.0 ) / TIM_Prescaler; // 分频后的定时器输入频率
  326. TIM_Period = utemp / Freq_PWM; // 周期常数
  327.  
  328. TIM_TimeBaseStructure.TIM_Period = TIM_Period - ;
  329. TIM_TimeBaseStructure.TIM_Prescaler = TIM_Prescaler - ;
  330. TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  331. TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  332. TIM_TimeBaseStructure.TIM_RepetitionCounter = - ; // 每次直接更新
  333. TIM_TimeBaseInit( TIM1, &TIM_TimeBaseStructure );
  334. //------------------------------------------------------------------------------
  335. /* PWM1 Mode configuration: Channel1 */
  336. TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
  337. TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; // 使能输出比较状态
  338. TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable; // 失能输出比较N状态
  339. TIM_OCInitStructure.TIM_Pulse = ;
  340. /*
  341. TIM_OCMode_PWM2 TIM_OCPolarity_Low 正脉冲模式
  342. TIM_OCMode_PWM2 TIM_OCPolarity_High 负脉冲模式
  343.  
  344. TIM_OCMode_PWM1 TIM_OCPolarity_Low 负脉冲模式
  345. TIM_OCMode_PWM1 TIM_OCPolarity_High 正脉冲模式
  346.  
  347. TIM1_OCPolarity输出极性---TIM_OCPolarity_High,输出比较极性高,输出的是正脉冲
  348. TIM1_OCPolarity输出极性---TIM_OCPolarity_Low, 输出比较极性低,输出的是负脉冲
  349. */
  350. TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
  351. TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low; // 互补输出极性
  352. // 选择空闲状态下的非工作状态
  353. // 当MOE=0设置TIM1输出比较空闲状态
  354. // 默认输出位低电平
  355. TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
  356. // 选择空闲状态下的非工作状态
  357. // 当MOE=0重置TIM1输出比较N空闲状态
  358. TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;
  359. TIM_OC3Init( TIM1, &TIM_OCInitStructure );
  360. TIM_OC3PreloadConfig( TIM1, TIM_OCPreload_Enable ); // 使能TIMx在CCR1上的预装载寄存器
  361.  
  362. /* TIM1 Update DMA Request enable */
  363. TIM_DMACmd( TIM1, TIM_DMA_Update, ENABLE );
  364.  
  365. //TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE); // 定时中断使能
  366. //TIM_ITConfig(TIM1,TIM_IT_CC3,ENABLE); // 定时中断使能
  367. TIM_Cmd( TIM1, ENABLE ); // 定时器开始运行
  368.  
  369. // 这条语句必须要有!!!
  370. TIM_CtrlPWMOutputs( TIM1, ENABLE ); /* Main Output Enable */
  371. }
  372. //******************************************************************************
  373. // 基本定时程序,周期为 TIME_TB
  374. //******************************************************************************
  375. static func_tb( void )
  376. {
  377. static INT16U tmr_100ms;
  378. static INT16U tmr_1000ms;
  379.  
  380. if ( !f_tb )
  381. return;
  382. f_tb = ;
  383.  
  384. if ( ++tmr_100ms >= ( / TIME_TB ) )
  385. {
  386. tmr_100ms = ;
  387. f_100ms = ;
  388.  
  389. GPIOC->ODR ^= GPIO_Pin_4; // led5 toogle
  390. }
  391. if ( ++tmr_1000ms >= ( / TIME_TB ) )
  392. {
  393. tmr_1000ms = ;
  394. f_1000ms = ;
  395. GPIOC->ODR ^= GPIO_Pin_5; // led4 toogle
  396. }
  397. }
  398.  
  399. //******************************************************************************
  400. // 进入睡眠模式
  401. // 自行编写
  402. //******************************************************************************
  403. void myPWR_EnterSleepMode( void )
  404. {
  405. //PWR->CR |= CR_CWUF_Set; /* Clear Wake-up flag */
  406.  
  407. /* Set SLEEPDEEP bit of Cortex System Control Register */
  408. //*(__IO uint32_t *) SCB_SysCtrl |= SysCtrl_SLEEPDEEP_Set;
  409. /* This option is used to ensure that store operations are completed */
  410.  
  411. __WFI( ); /* Request Wait For Interrupt */
  412. }
  413. //******************************************************************************
  414. // 主程序
  415. //******************************************************************************
  416. void main( void )
  417. {
  418. int i;
  419.  
  420. RCC_Configuration( );
  421. GPIO_Configuration( );
  422. delayms( ); // 延时,等待电压稳定
  423. Tim1_Configuration( );
  424. DMA_Configuration( );
  425. SysTick_Config1( );
  426. NVIC_Configuration( );
  427. //------------------------------------------------------------------------------
  428. for ( i = ; i < ; ++i )
  429. {
  430. //i=0;
  431. //GPIOA->ODR ^= GPIO_Pin_10; // led3 toogle
  432. //GPIOA->ODR ^= GPIO_Pin_11; // led3 toogle
  433.  
  434. delayms( );
  435. led_toggle( );
  436. }
  437. //------------------------------------------------------------------------------
  438. for ( ;; )
  439. {
  440. //if (set_sw&0x01)
  441. //myPWR_EnterSleepMode(); // 休眠,降低功耗
  442.  
  443. func_tb( );
  444. }
  445. }
  446. //******************************************************************************
  447. #ifdef USE_FULL_ASSERT
  448. /**
  449. * @brief Reports the name of the source file and the source line number
  450. * where the assert_param error has occurred.
  451. * @param file: pointer to the source file name
  452. * @param line: assert_param error line source number
  453. * @retval : None
  454. */
  455. void assert_failed(uint8_t* file, uint32_t line)
  456. {
  457. /* User can add his own implementation to report the file name and line number,
  458. ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  459.  
  460. /* Infinite loop */
  461. while ()
  462. {
  463. }
  464. }
  465. #endif
  1. /**
  2. ******************************************************************************
  3. * @file Project/Template/stm32f10x_it.c
  4. * @author MCD Application Team
  5. * @version V3.0.0
  6. * @date 04/06/2009
  7. * @brief Main Interrupt Service Routines.
  8. * This file provides template for all exceptions handler and
  9. * peripherals interrupt service routine.
  10. ******************************************************************************
  11. * @copy
  12. *
  13. * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  14. * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  15. * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  16. * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  17. * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  18. * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  19. *
  20. * <h2><center>&copy; COPYRIGHT 2009 STMicroelectronics</center></h2>
  21. */
  22.  
  23. /* Includes ------------------------------------------------------------------*/
  24. #include "stm32f10x_it.h"
  25. #include "stm32_m.h"
  26.  
  27. int tt;
  28. extern bit f_tb; // 基本定时标志
  29. //******************************************************************************
  30. /******************************************************************************/
  31. /* Cortex-M3 Processor Exceptions Handlers */
  32. /******************************************************************************/
  33.  
  34. /**
  35. * @brief This function handles NMI exception.
  36. * @param None
  37. * @retval : None
  38. */
  39. void NMI_Handler( void )
  40. {
  41. }
  42.  
  43. /**
  44. * @brief This function handles Hard Fault exception.
  45. * @param None
  46. * @retval : None
  47. */
  48. void HardFault_Handler( void )
  49. {
  50. /* Go to infinite loop when Hard Fault exception occurs */
  51. while ( )
  52. {
  53. }
  54. }
  55.  
  56. /**
  57. * @brief This function handles Memory Manage exception.
  58. * @param None
  59. * @retval : None
  60. */
  61. void MemManage_Handler( void )
  62. {
  63. /* Go to infinite loop when Memory Manage exception occurs */
  64. while ( )
  65. {
  66. }
  67. }
  68.  
  69. /**
  70. * @brief This function handles Bus Fault exception.
  71. * @param None
  72. * @retval : None
  73. */
  74. void BusFault_Handler( void )
  75. {
  76. /* Go to infinite loop when Bus Fault exception occurs */
  77. while ( )
  78. {
  79. }
  80. }
  81.  
  82. /**
  83. * @brief This function handles Usage Fault exception.
  84. * @param None
  85. * @retval : None
  86. */
  87. void UsageFault_Handler( void )
  88. {
  89. /* Go to infinite loop when Usage Fault exception occurs */
  90. while ( )
  91. {
  92. }
  93. }
  94.  
  95. /**
  96. * @brief This function handles SVCall exception.
  97. * @param None
  98. * @retval : None
  99. */
  100. void SVC_Handler( void )
  101. {
  102. }
  103.  
  104. /**
  105. * @brief This function handles Debug Monitor exception.
  106. * @param None
  107. * @retval : None
  108. */
  109. void DebugMon_Handler( void )
  110. {
  111. }
  112.  
  113. /**
  114. * @brief This function handles PendSVC exception.
  115. * @param None
  116. * @retval : None
  117. */
  118. void PendSV_Handler( void )
  119. {
  120. }
  121.  
  122. /**
  123. * @brief This function handles SysTick Handler.
  124. * @param None
  125. * @retval : None
  126. */
  127. void SysTick_Handler( void )
  128. {
  129. f_tb = ;
  130. }
  131. /******************************************************************************/
  132. /* STM32F10x Peripherals Interrupt Handlers */
  133. /* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */
  134. /* available peripheral interrupt handler's name please refer to the startup */
  135. /* file (startup_stm32f10x_xx.s). */
  136. /******************************************************************************/
  137. void TIM1_UP_IRQHandler( void ) // 实际测量,周期为50US
  138. {
  139. tt = ;
  140. TIM_ClearITPendingBit( TIM1, TIM_IT_Update );
  141. }
  142. /******************************************************************************/
  143. void TIM1_CC_IRQHandler( void )
  144. {
  145. tt = ;
  146. TIM_ClearITPendingBit( TIM1, TIM_IT_CC3 );
  147. }
  148.  
  149. /******************************************************************************/
  150. void DMA1_Channel5_IRQHandler( void )
  151. {
  152. tt = ;
  153. DMA_ClearITPendingBit( DMA1_IT_TC5 );
  154. GPIOA->ODR ^= GPIO_Pin_11; // for test!
  155. }
  156. //******************************************************************************
  157. /******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/
  158. //******************************************************************************

STM32学习日志--使用DMA功能自动更新PWM的输出的更多相关文章

  1. [阿里DIN] 从论文源码学习 之 embedding层如何自动更新

    [阿里DIN] 从论文源码学习 之 embedding层如何自动更新 目录 [阿里DIN] 从论文源码学习 之 embedding层如何自动更新 0x00 摘要 0x01 DIN源码 1.1 问题 1 ...

  2. stm32学习笔记之GPIO功能框图分析

    GPIO 是通用输入输出端口的简称,简单来说就是STM32 可控制的引脚,STM32 芯片的GPIO 引脚与外部设备连接起来,从而实现与外部通讯.控制以及数据采集的功能.STM32 芯片的GPIO被分 ...

  3. STM32学习日志

    今天是开学第二周周末 写这篇博客纯属是为了记住一些学到的知识,大佬勿喷.. 首先学32要知道一些选型知识,32中常用的芯片类型(某宝常卖的开发板芯片大多是这几种):C8T6,RBT6,RCT6,VET ...

  4. Cordova webapp实战开发:(5)如何写一个Andorid下自动更新的插件?

    在 <Cordova webapp实战开发:(4)Android环境搭建>中我们搭建好了开发环境,也给大家布置了调用插件的预习作业,做得如何了呢?今天我们来学一下如何自己从头建立一个And ...

  5. spring cloud学习(六) 配置中心-自动更新

    上一篇学习了spring cloud config的基本使用,但发现有个问题,就是每次更改配置后,都需要重启服务才能更新配置,这样肯定是不行的.在上网查资料了解后,spring cloud支持通过AM ...

  6. WinForm应用程序中实现自动更新功能

    WinForm应用程序中实现自动更新功能 编写人:左丘文 2015-4-20 近来在给一客户实施ECM系统,但他们使用功能并不是我们ECM制造版提供的标准功能,他们要求对系统作一些定制功能,为了避免因 ...

  7. StringBoot整合ELK实现日志收集和搜索自动补全功能(详细图文教程)

    @ 目录 StringBoot整合ELK实现日志收集和搜索自动补全功能(详细图文教程) 一.下载ELK的安装包上传并解压 1.Elasticsearch下载 2.Logstash下载 3.Kibana ...

  8. Android应用自动更新功能的代码实现

    由于Android项目开源所致,市面上出现了N多安卓软件市场.为了让我们开发的软件有更多的用户使用,我们需要向N多市场发布,软件升级后,我们也必须到安卓市场上进行更新,给我们增加了工作量.因此我们有必 ...

  9. Winform(C#.NET)自动更新组件的使用及部分功能实现

    声明:核心功能的实现是由园子里圣殿骑士大哥写的,本人是基于他核心代码,按照自己需求进行修改的.   而AutoUpdaterService.xml文件生成工具是基于评论#215楼 ptangbao的代 ...

随机推荐

  1. 在 Linux 中安装 VMware Tools

    由于较新的Linux版本中都包含了vm的部分组件,导致直接安装VMware Tools失败.所以这里写了篇新的. 软件版本:VMware 12 Linux版本:Ubuntu Desktop 16.04 ...

  2. HDU 2054 又见GCD

    又见GCD Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  3. HDU 6406 Taotao Picks Apples 线段树维护

    题意:给个T,T组数据: 每组给个n,m:n个数,m个操作: (对序列的操作是,一开始假设你手上东西是-INF,到i=1时拿起1,之后遍历,遇到比手头上的数量大的数时替换(拿到手的算拿走),问最后拿走 ...

  4. 一份最中肯的Java学习路线+资源分享(拒绝傻逼式分享)

    这是一篇针对Java初学者,或者说在Java学习路线上出了一些问题(不知道该学什么.不知道整体的学习路线是什么样的) 第一步:Java基础(一个月左右) 推荐视频: 下面的是黑马内部视频,我比较推荐的 ...

  5. SquishIt引起的HTTP Error 500.0 - Internal Server Error

    将一个ASP.NET项目从.NET Framework 4.0升级至.NET Framework 4.5之后,访问时出现HTTP Error 500.0 - Internal Server Error ...

  6. python3解析库pyquery

    pyquery是一个类似jquery的python库,它实现能够在xml文档中进行jQuery查询,pyquery使用lxml解析器进行快速在xml和html文档上操作,它提供了和jQuery类似的语 ...

  7. springboot日志框架

    Spring Boot日志框架Spring Boot支持Java Util Logging,Log4j2,Lockback作为日志框架,如果你使用starters启动器,Spring Boot将使用L ...

  8. hadoop控制map个数(转)

    原文链接:https://blog.csdn.net/lylcore/article/details/9136555     hadooop提供了一个设置map个数的参数mapred.map.task ...

  9. 【mysql】source导入多个文件

    在mysql中,可以将表导出为sql文件,比如1.sql, 2.sql等等. 导入一个文件: source /home/somepath/.sql 那么问题来了,如果我想一次导入100个文件呢?总不能 ...

  10. JS模块化编程(一):CommonJS,AMD/CMD

    前言 模块化是什么? 为什么采用模块化? 场景: 一个html,因不同的业务需求开发,会不断的引入js文件.另外,a.js和b.js中的变量或函数必须是全局的,才能暴露给使用方. <script ...