标签:参考手册 har lin 模式 com and 中文 编写 串口发送
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //使能端口时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //使能串口时钟
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1); GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1); 、
/*GPIO配置*/ IO_Init.GPIO_Mode = GPIO_Mode_AF; //配置成复用模式 IO_Init.GPIO_OType = GPIO_OType_PP; IO_Init.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; IO_Init.GPIO_PuPd = GPIO_PuPd_UP; IO_Init.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &IO_Init);
/*串口初始配置*/ UT_Init.USART_BaudRate = 9600; //波特率 UT_Init.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //无硬件控制流 UT_Init.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //发送接收 UT_Init.USART_Parity = USART_Parity_No; //无奇偶校验 UT_Init.USART_StopBits = USART_StopBits_1; //停止位1 UT_Init.USART_WordLength = USART_WordLength_8b; //数据位8 USART_Init(USART1, &UT_Init);
/*中断优先级设置,中断分组*/ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断优先级分组2 NC_Init.NVIC_IRQChannel=USART1_IRQn; //串口1中断通道 NC_Init.NVIC_IRQChannelCmd=ENABLE; //使能中断 NC_Init.NVIC_IRQChannelPreemptionPriority=0; //抢占优先级 NC_Init.NVIC_IRQChannelSubPriority=0; //响应优先级 NVIC_Init(&NC_Init);
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); //配置串口中断类型,接收数据中断 USART_Cmd(USART1, ENABLE);
void USART1_IRQHandler(void) //串口1中断服务程序 { u8 Receive_Data = 0; if(USART_GetITStatus(USART1, USART_IT_RXNE)) //由于只设置了一种接收中断,判断可以省略 { Receive_Data = USART_ReceiveData(USART1);//保存接收到的数据,RXNE自动清零 printf("Receive Succsed: %2x \r\n", Receive_Data);//回复接收完成 if(Receive_Data==0x01) LED0=!LED0; // USART_ClearFlag(USART1,USART_IT_RXNE); //手动清零 } }
由于本程序只使能串口接收到数据(USART_IT_RXNE)产生中断,所以在执行中断服务函数之前可以不用判断,如果使能了多种串口中断,则要先判断产生中断的类型,注意读取数据后,RXNE寄存器自动清零,不需要再手动清零。
int main(void) { LED_Init(); delay_init(168); USART1_Config(); LED0_OFF; LED1_OFF; while(1) { LED1=!LED1; printf("Running....\r\n"); delay_ms(500); } }
以上工作做好后,就可以将程序下载到STM32了, 可以发现LED1在闪烁,同时串口发送来了running.....当电脑发送一个0x01时LED0的状态会反转。
本程序只使用了串口接收完成后产生中断,如果我们要让数据发送完成后产生中断,应该如何配置呢?方法是类似的,中断配置时只需要设置为USART_ITConfig(USART1, USART_IT_TC, ENABLE); 同样可以通过函数USART_GetITStatus(USART1, USART_IT_TC) 来判断是否产生发送完成中断。
2017年4月18日21:42:36
标签:参考手册 har lin 模式 com and 中文 编写 串口发送
原文地址:http://www.cnblogs.com/whik/p/6730678.html