stm32串口通信
来源:互联网 发布:sql语句修改数据类型 编辑:程序博客网 时间:2024/06/05 22:24
//实现了stm32的串口通信,向stm32中发送数据,或者利用串口发送数据到stm32,其中应用了中断,到接收的数据完成了,发生中断,将数据发出!以回车为结束,每次接收一个字节,放到全局变量USART_RX_BUF中。
#include "stm32f4xx.h"
#include "stdio.h"#define USART_REC_LEN 200
#define EN_USART1_RX 1
u8 USART_RX_BUF[USART_REC_LEN];
u16 USART_RX_STA;
void delay(void){
int i,j;
for(i=0;i<1000;i++)
for(j=0;j<10000;j++)
{}
}
void uart1_init(u32 bound);
void NVIC_init(void );
void USART1_IRQHandler(void );
int main(void)
{
u8 len,i;
u16 times=0;
USART_RX_STA=0;
delay();
uart1_init(115200);
NVIC_init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
while(1){
if((USART_RX_STA&0X8000)){
delay( );
len=USART_RX_STA&0x3fff;
for(i=0;i<len;i++){
USART_SendData( USART1, USART_RX_BUF[i]);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
}
USART_RX_STA=0;
}else{
USART_SendData( USART1, 'a '); // 在没有数据接受到时,一直发送,表明程序在运行
delay( );
times++;
if(times%5000==0)
delay();
delay();
}
}
}
void uart1_init(u32 bound){
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
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_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStructure);
USART_Cmd(USART1, ENABLE);
}
void NVIC_init(void){
NVIC_InitTypeDef NVIC_InitStruct;
USART_ITConfig( USART1, USART_IT_RXNE, ENABLE);
NVIC_InitStruct.NVIC_IRQChannel=USART1_IRQn;
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=2;
NVIC_InitStruct.NVIC_IRQChannelSubPriority=2;
NVIC_Init(&NVIC_InitStruct);
}
void USART1_IRQHandler(void ){
u8 Res;
if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
{
Res=USART_ReceiveData(USART1);
if((USART_RX_STA&0x8000)==0){
if(USART_RX_STA&0x4000){
if(Res!=0x0a)USART_RX_STA=0;
else USART_RX_STA|=0x8000;
}else{
if(Res==0x0d)USART_RX_STA|=0X4000;
else{
USART_RX_BUF[USART_RX_STA&0x3FFF]=Res;
USART_RX_STA++;
if(USART_RX_STA>(USART_REC_LEN-1)) USART_RX_STA=0;
}
}
}
}
}
0 0
- STM32的串口通信
- STM32 串口USART 通信
- stm32串口间通信
- stm32串口通信
- STM32----------串口通信(USART)
- stm32-8串口通信
- STM32串口通信
- stm32串口通信
- STM32串口通信
- STM32之串口通信
- STM32 --UART串口通信
- stm32串口通信
- stm32串口通信
- stm32与串口通信
- STM32串口通信:串口通信库
- STM32串口通信程序设计要点
- STM32串口通信程序设计要点
- STM32串口多机通信
- Android SO文件的兼容和适配
- 关于VMware12 下安装与配置CentOS 6.5 64位 的方法图文教程
- IE浏览器无法上网
- 【HDU6030】Happy Necklace(找规律+矩阵快速幂)
- 开源日志系统比较
- stm32串口通信
- 金仕达程序化交易平台初步设计
- 单键开关机电路
- elasticsearch安装出现的问题
- 带赖子的胡牌算法lua版本
- Ruby+SASS+Compass
- nginx分别在window和linux搭建集群以及session共享问题
- jffs2之制作与烧录
- HTTP Status 500