本帖最后由 归然 于 2016-11-10 10:11 编辑
初学STM32,用的是正点原子STM32F407的开发板,用STlink下载调试。
现在的问题是,我仿照教程,写了串口通讯的代码,就是很简单的串口发送接收和接收中断。用串口调试助手看MCU发送的数据一直都有误,搞了两晚都搞不好。
用开发板视频的工程例程烧入开发板,串口功能正常,接收到的数据都正常。用他的代码复制到我的工程里面,接收数据还是有问题。
对比过工程的设置,也没看出来有什么差异。
所以特地上来问一下大家。
[mw_shl_code=c,true]
void uart1_config()
{
GPIO_InitTypeDef uart1_gpio_init;
USART_InitTypeDef uart1_init;
NVIC_InitTypeDef uart1_nvic_init;
PFout(10)=0;
//使能时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
//IO口设置成复用
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
//配置IO口
uart1_gpio_init.GPIO_Mode=GPIO_Mode_AF;
uart1_gpio_init.GPIO_OType=GPIO_OType_PP;
uart1_gpio_init.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10;
uart1_gpio_init.GPIO_PuPd=GPIO_PuPd_UP;
uart1_gpio_init.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&uart1_gpio_init);
//配置串口
uart1_init.USART_BaudRate=115220;
uart1_init.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
uart1_init.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
uart1_init.USART_Parity=USART_Parity_No;
uart1_init.USART_StopBits=USART_StopBits_1;
uart1_init.USART_WordLength=USART_WordLength_8b;
USART_Init(USART1,&uart1_init);
USART_Cmd(USART1,ENABLE);//使能串口1
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//使能接收中断
//配置中断优先级
uart1_nvic_init.NVIC_IRQChannel=USART1_IRQn;
uart1_nvic_init.NVIC_IRQChannelCmd=ENABLE;
uart1_nvic_init.NVIC_IRQChannelPreemptionPriority=1;//抢占优先级
uart1_nvic_init.NVIC_IRQChannelSubPriority=1;//响应优先级
NVIC_Init(&uart1_nvic_init);
PFout(10)=1;
}
[/mw_shl_code]
[mw_shl_code=c,true]
void USART1_IRQHandler(void)
{
u8 res;
if(USART_GetITStatus(USART1,USART_IT_RXNE))
{
//USART_ClearFlag(USART1,USART_FLAG_RXNE);
PFout(10)=0;
res=USART_ReceiveData(USART1);
USART_SendData(USART1,res);
}
PFout(10)=1;
}
int main(void)
{
delay_init(168);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断分组
gpio_config();
uart1_config();
while(1)
{
delay_ms(50);
PFout(9)=1;
delay_ms(50);
PFout(9)=0;
USART_SendData(USART1,1);
}
}
[/mw_shl_code]
如上面写的,在while语句里面串口发送1,应该接收到的是0x31才对,但我接收到的是0x1C,而发送1给开发板,接收到的也不是0x31。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>