新手上路
- 积分
- 48
- 金钱
- 48
- 注册时间
- 2014-11-11
- 在线时间
- 12 小时
|
5金钱
因为视频里说到重映射的问题,所以我想试一下这个功能。所以把原子哥库函数的串口实验的代码自己修改了一下。
发现程序能下载进去,而且led也会闪烁。但是串口调试助手却一片空白,没有接受到数据。 但是原本的代码是可以的。
ps:我使用的是USART3 的重映射 。 而且后来我自己也试过不用重映射功能,还是出现同样的问题
没有重映像(TX/PB10, RX/PB11 ), 部分映像(TX/PC10, RX/PC11 )。
下面是代码。
main()函数
int main(void)
{
u8 t;
u8 len;
u16 times=0;
delay_init(); //延时函数初始化
NVIC_Configuration();// 设置中断优先级分组
uart_init(9600); //串口初始化为9600
LED_Init(); //初始化与LED连接的硬件接口
while(1)
{
if(USART_RX_STA&0x8000)
{
len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
printf("\r\n您发送的消息为:\r\n");
for(t=0;t<len;t++)
{
USART3->DR=USART_RX_BUF[t];
while((USART3->SR&0X40)==0);//等待发送结束
}
printf("\r\n\r\n");//插入换行
USART_RX_STA=0;
}else
{
times++;
if(times%5000==0)
{
printf("\r\nALIENTEK MiniSTM32开发板 串口实验\r\n");
printf("正点原子@ALIENTEK\r\n\r\n\r\n");
}
if(times%200==0)printf("请输入数据,以回车键结束\r\n");
if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行.
delay_ms(10);
}
}
USART的设置
//GPIO端口设置
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能USART1,GPIOC时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);
USART_DeInit(USART3); //复位串口3
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //选择PC.10(TXD)
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //管脚频率为50MHZ
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //输出模式为复用推挽输出
GPIO_Init(GPIOC,&GPIO_InitStructure); //初始化PC10
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; //选择PC.11(RXD)
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //输出模式为浮空输入
GPIO_Init(GPIOC,&GPIO_InitStructure); //初始化PC11
GPIO_PinRemapConfig(GPIO_PartialRemap_USART3,ENABLE); //启用部分重映射功能
/USART 初始化设置
USART_InitStructure.USART_BaudRate = bound;//一般设置为9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
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(USART3, &USART_InitStructure); //初始化串口
USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//开启中断
USART_Cmd(USART3, ENABLE); //使能串口
需要改的我基本上都改了,为什么还是不行呢?
|
|