国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee
ELEOK
標題:
基于STM32F103VE實現呼吸燈源程序
[打印本頁]
作者:
路漫漫
時間:
2020-6-10 17:14
標題:
基于STM32F103VE實現呼吸燈源程序
完整源碼:
stm32_test_20200417_呼吸燈.7z
(176.35 KB, 售價: 1 E幣)
2020-6-10 17:14 上傳
點擊文件名下載附件
售價: 1 E幣
[記錄]
[
購買
]
部分源碼:
int main(void)
{
led_init(); // LED初始化函數
nvic_init(); // NVIC配置函數
exti_init(); // EXTI配置函數
usart_init(); // USART配置函數
tim_init(); // TIM配置函數
usart1_sendstring("This is a testing\n");
usart1_sendstring("Hello STM32\n");
/* Infinite loop */
while (1)
{
}
}
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
it.c:
// EXTI0中斷服務函數
void EXTI0_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line0) != RESET) // 確保相應中斷發生了
{
EXTI_ClearITPendingBit(EXTI_Line0); // 清除EXTI0中斷標志位
if(GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_5) == 0) // 判斷LED引腳電平是否為0
{
GPIO_SetBits(GPIOB, GPIO_Pin_5); // LED OFF
}
else // GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_5) == 1
{
GPIO_ResetBits(GPIOB, GPIO_Pin_5); // LED ON
}
}
}
uint8_t rx_buffer_flag = 0;
uint8_t rx_buffer[5] = {0};
uint8_t rx_buffer_cnt = 0;
void USART1_IRQHandler(void)
{
uint8_t rcv_data = 0;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) // 確保相應的中斷發生
{
USART_ClearITPendingBit(USART1, USART_IT_RXNE); // 清除USART1接收中斷位
rcv_data = USART_ReceiveData(USART1); // 接收數據
// usart1_sendbyte(rcv_data); // 發送數據
if(rcv_data == 0xAA)
{
rx_buffer_flag = 1;
}
if(rx_buffer_flag == 1)
{
rx_buffer[rx_buffer_cnt] = rcv_data;
rx_buffer_cnt++;
}
if(rx_buffer_cnt >= 4)
{
rx_buffer_flag = 0;
rx_buffer[4] = '\0';
usart1_sendstring((char *)(rx_buffer + 1));
rx_buffer_cnt = 0;
}
}
}
// TIM6中斷服務函數
void TIM6_IRQHandler(void)
{
if(TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM6, TIM_IT_Update);
// if(GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_5) == 0) // 判斷LED引腳電平是否為0
// {
// GPIO_SetBits(GPIOB, GPIO_Pin_5); // LED OFF
// }
// else // GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_5) == 1
// {
// GPIO_ResetBits(GPIOB, GPIO_Pin_5); // LED ON
// }
}
}
// TIM3中斷服務函數
uint8_t cnt1 = 0;
uint8_t cnt2 = 0;
uint8_t cnt_flag = 0;
void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
cnt1++;
if(cnt1 >= 100)
{
cnt1 = 0;
TIM3->CCR3 = cnt2;
if(cnt_flag == 0)
{
cnt2++;
}
else
{
cnt2--;
}
if(cnt2 >= 100)
{
cnt_flag = 1;
}
else if(cnt2 == 0)
{
cnt_flag = 0;
}
}
}
}
復制代碼
歡迎光臨 ELEOK (http://m.afoofa.cn/)
Powered by Discuz! X5.0