新手上路
- 积分
- 43
- 金钱
- 43
- 注册时间
- 2014-8-22
- 在线时间
- 1 小时
|
5金钱
我写的main(),这个代码已经调试了3天了,还是调试不出来,我和以前原子的代码进行了对比,
已经把串口的初始化代码进行了先后顺序的调整,也一条一条的对比了,在串口调试助手上还是调试不出结果啊??
我在Debug中进行仿真调试的时候,是没有进入中断,但是已经进行了中断优先级分组了啊,也已经使能串口,使能中断了啊!
为啥还是出不了结果啊。。。
求帮助~~
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "beep.h"
#include "usart_test.h"
int main(void)
{
SystemInit();
NVIC_Configuration();
delay_init();
led_Init();
beep_Init();
usart_Init_test(9600);
while(1)
{
USART_SendData(USART1,'B');
delay_ms(5);
delay_ms(1000);
}
}
#include "usart_test.h"
//extern u16 bound_test;
void usart_Init_test(u32 bound_test)
{
GPIO_InitTypeDef GPIO_InitStructer;
USART_InitTypeDef USART_InitStructer;
NVIC_InitTypeDef NVIC_InitStructer;
//配置GPIOA 结构体
RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA,ENABLE);
USART_DeInit(USART1); //复位串口1
GPIO_InitStructer.GPIO_Pin=GPIO_Pin_9;//PA2 TX发送引脚
GPIO_InitStructer.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructer.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO_InitStructer);
GPIO_InitStructer.GPIO_Pin=GPIO_Pin_10;//PA3 RX接收引脚
GPIO_InitStructer.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_InitStructer);
USART_InitStructer.USART_BaudRate=bound_test;//初始化波特率
USART_InitStructer.USART_WordLength=USART_WordLength_8b;//8位数据
USART_InitStructer.USART_StopBits=USART_StopBits_1;//1位停止位
USART_InitStructer.USART_Parity=USART_Parity_No;//无奇偶校验
USART_InitStructer.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_InitStructer.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;//设置为接收发送模式
USART_Init(USART1,&USART_InitStructer);
NVIC_InitStructer.NVIC_IRQChannel=USART1_IRQn;
NVIC_InitStructer.NVIC_IRQChannelPreemptionPriority=3;
NVIC_InitStructer.NVIC_IRQChannelSubPriority=3;
NVIC_InitStructer.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructer);
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//使能串口中断
USART_Cmd(USART1,ENABLE);//使能串口
}
void USART1_IRQHandler(void)
{
u8 Res=123;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
// Res =USART_ReceiveData(USART1);
USART_SendData(USART1,Res);
}
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
usart_test.h
#ifndef USART_TEST_H
#define USART_TEST_H
#include "sys.h"
#include "stdio.h"
//u16 bound_test;
void usart_Init_test(u32 bound_test);
#endif
|
最佳答案
查看完整内容[请看2#楼]
void usart_Init_test(u32 bound_test)
{
GPIO_InitTypeDef GPIO_InitStructer;
USART_InitTypeDef USART_InitStructer;
NVIC_InitTypeDef NVIC_InitStructer;
//配置GPIOA 结构体
RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA,ENABLE);
USART_DeInit(USART1); //复位串口1
你这里用的复位函数。
要用时钟使能函数:
RCC_APB2PeriphClockCmd()。
太粗心了
|