串口输入控制LED
通过对比USART3_RxBuffer与我们输入的数字 “1”,匹配则返回0,电位下拉(GPIO_ResetBits(GPIOE,GPIO_Pin_3);)LED-PC3亮灯。void USART3_IRQHandler(void)内有USART3_RxFinished =1;缓冲区,if(strcmp((char*)USART3_RxBuffer,"1")==0)即当产生中断,串口接收到一个字节
·
# if 1
while(1)
{
//读取串口接收数据
#ifdef USE_DMA
if(USART3_RxFinished == 1){ //判断有没有数据函数
show_menu();
USART3_RxFinished = 0;
if(strcmp((char*)USART3_RxBuffer,"1")==0)
{
GPIO_ResetBits(GPIOE,GPIO_Pin_3);
}
printf("uart3_rcv = %s\r\n", USART3_RxBuffer);
memset(USART3_RxBuffer, 0, USART3_RX_BUFFER_SIZE);
DMA_SetCurrDataCounter(DMA1_Channel3, USART3_RX_BUFFER_SIZE);
DMA_Cmd(DMA1_Channel3, ENABLE); //重启
}
#else
printf("uart3_rcv = %c\r\n", uart3_cmd);
#endif
SysTick_delay_ms(1000);
}
# endif
while(1);
先定义USART3_RxFinished =0 ;在我们定义的usart.c 中
uint8_t USART3_RxBuffer[USART3_RX_BUFFER_SIZE];
volatile uint16_t USART3_RxCount = 0;
volatile uint8_t USART3_RxFinished = 0;
当我们完成产生中断,触发
void USART3_IRQHandler(void)内有USART3_RxFinished =1;
即当产生中断,串口接收到一个字节(我们通过串口工具发送的),触发 USART3_IRQHandler。
DMA自动将串口接收到的字节搬运到 USART3_RxBuffer 缓冲区, if(strcmp((char*)USART3_RxBuffer,"1")==0)
{
GPIO_ResetBits(GPIOE,GPIO_Pin_3);
}
通过对比USART3_RxBuffer 与 我们输入的数字 “1” ,匹配则返回0,电位下拉( GPIO_ResetBits(GPIOE,GPIO_Pin_3);) LED-PC3亮灯
更多推荐



所有评论(0)