国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

 找回密碼
 注冊
搜索

基于STM32F103VE實現呼吸燈源程序

[復制鏈接]
樓主
路漫漫 發表于 2020-6-10 17:14:36 | 只看該作者 |倒序瀏覽 |閱讀模式
完整源碼: stm32_test_20200417_呼吸燈.7z (176.35 KB, 售價: 1 E幣)
部分源碼:
  1. int main(void)
  2. {
  3.         led_init();         // LED初始化函數
  4.         nvic_init();        // NVIC配置函數
  5.         exti_init();        // EXTI配置函數
  6.         usart_init();        // USART配置函數
  7.         tim_init();                // TIM配置函數
  8.         
  9.         usart1_sendstring("This is a testing\n");
  10.         usart1_sendstring("Hello STM32\n");

  11.   /* Infinite loop */
  12.   while (1)
  13.   {
  14.   }
  15. }
  16. /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/

  17. it.c:
  18. // EXTI0中斷服務函數
  19. void EXTI0_IRQHandler(void)
  20. {
  21.                 if(EXTI_GetITStatus(EXTI_Line0) != RESET) // 確保相應中斷發生了
  22.                 {
  23.                                 EXTI_ClearITPendingBit(EXTI_Line0);                // 清除EXTI0中斷標志位
  24.                                 
  25.                                 if(GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_5) == 0) // 判斷LED引腳電平是否為0
  26.                                 {
  27.                                                 GPIO_SetBits(GPIOB, GPIO_Pin_5);                // LED OFF
  28.                                 }
  29.                                 else // GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_5) == 1
  30.                                 {
  31.                                                 GPIO_ResetBits(GPIOB, GPIO_Pin_5);        // LED ON
  32.                                 }
  33.                 }
  34. }

  35. uint8_t rx_buffer_flag = 0;
  36. uint8_t rx_buffer[5] = {0};
  37. uint8_t rx_buffer_cnt = 0;
  38. void USART1_IRQHandler(void)
  39. {
  40.                 uint8_t rcv_data = 0;
  41.                 if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) // 確保相應的中斷發生
  42.                 {
  43.                                 USART_ClearITPendingBit(USART1, USART_IT_RXNE);                // 清除USART1接收中斷位
  44.                         
  45.                                 rcv_data = USART_ReceiveData(USART1);                                                        // 接收數據
  46. //                                usart1_sendbyte(rcv_data);                                                                                                // 發送數據
  47.                                 if(rcv_data == 0xAA)
  48.                                 {
  49.                                                 rx_buffer_flag = 1;
  50.                                 }
  51.                                 if(rx_buffer_flag == 1)
  52.                                 {
  53.                                                 rx_buffer[rx_buffer_cnt] = rcv_data;
  54.                                                 rx_buffer_cnt++;
  55.                                 }
  56.                                 if(rx_buffer_cnt >= 4)
  57.                                 {
  58.                                                 rx_buffer_flag = 0;
  59.                                                 rx_buffer[4] = '\0';
  60.                                                 usart1_sendstring((char *)(rx_buffer + 1));
  61.                                                 rx_buffer_cnt = 0;
  62.                                 }
  63.                                 
  64.                 }
  65. }

  66. // TIM6中斷服務函數
  67. void TIM6_IRQHandler(void)
  68. {
  69.                 if(TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET)
  70.                 {
  71.                                 TIM_ClearITPendingBit(TIM6, TIM_IT_Update);
  72.                         
  73. //                                if(GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_5) == 0) // 判斷LED引腳電平是否為0
  74. //                                {
  75. //                                                GPIO_SetBits(GPIOB, GPIO_Pin_5);                // LED OFF
  76. //                                }
  77. //                                else // GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_5) == 1
  78. //                                {
  79. //                                                GPIO_ResetBits(GPIOB, GPIO_Pin_5);        // LED ON
  80. //                                }
  81.                 }
  82. }

  83. // TIM3中斷服務函數
  84. uint8_t cnt1 = 0;
  85. uint8_t cnt2 = 0;
  86. uint8_t cnt_flag = 0;
  87. void TIM3_IRQHandler(void)
  88. {
  89.                 if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
  90.                 {
  91.                                 TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
  92.                         
  93.                                 cnt1++;
  94.                                 if(cnt1 >= 100)
  95.                                 {
  96.                                                 cnt1 = 0;
  97.                                                 TIM3->CCR3 = cnt2;
  98.                                                 if(cnt_flag == 0)
  99.                                                 {
  100.                                                                 cnt2++;
  101.                                                 }
  102.                                                 else
  103.                                                 {
  104.                                                                 cnt2--;
  105.                                                 }
  106.                                                 if(cnt2 >= 100)
  107.                                                 {
  108.                                                                 cnt_flag = 1;
  109.                                                 }
  110.                                                 else if(cnt2 == 0)
  111.                                                 {
  112.                                                                 cnt_flag = 0;
  113.                                                 }
  114.                                 }
  115.                
  116.                 }

  117. }
復制代碼


您需要登錄后才可以回帖 登錄 | 注冊

本版積分規則

手機版|小黑屋|ELEOK |網站地圖

GMT+8, 2026-5-26 01:08

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回復 返回頂部 返回列表