原子哥好:
请教uart1引脚功能重定义问题。datasheet上说PB6,PB7可以重定义为USART1_TX和USART1_RX功能,但是为什么在程序上实现不了,无数据输出我修改了开发板实例程序如下,麻烦原子哥看看问题在哪里? 还有我是用uart下载程序我把开发板TXD,RXD和PA9,PA10连接起来时,可以正常下载程序,但是我把TXD,RXD和PB6,PB7,或者PC10,PC11(这两个引脚也可以可以重定义为USART),发现都不能下载程序,不知道是什么原因。
#include <stm32f10x_lib.h>
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
//Mini STM32开发板范例代码1
//跑马灯实验
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
void Send_Char(u8 dat)
{
while((USART1->SR&0X40)==0);//循环发送,直到发送完毕
USART1->DR = dat;
}
void uart_init(u32 pclk2,u32 bound)
{
float temp;
u16 mantissa;
u16 fraction;
temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV
mantissa=temp; //得到整数部分
fraction=(temp-mantissa)*16; //得到小数部分
mantissa<<=4;
mantissa+=fraction;
//RCC->APB2ENR|=1<<2; //使能PORTA口时钟
//RCC->APB2ENR|=1<<14; //使能串口时钟
//GPIOA->CRH&=0XFFFFF00F;
//GPIOA->CRH|=0X000008B0;//IO状态设置
RCC->APB2ENR|=1<<3; //使能PORTB口时钟
RCC->APB2ENR|=1<<14; //使能UART1时钟
GPIOB->CRL&=0X00FFFFFF;
GPIOB->CRL|=0X8B000000;// PB7为复用输入模式 ; PB6为复用输出模式
AFIO->MAPR|=1<<2;//USART1_REMAP为1 UART1功能重映射。TX/PB6,RX/PB7 我的程序只修改了这里,其他没有修改过
RCC->APB2RSTR|=1<<14; //复位串口1
RCC->APB2RSTR&=~(1<<14);//停止复位
//波特率设置
USART1->BRR=mantissa; // 波特率设置
USART1->CR1|=0X200C; //1位停止,无校验位.
#ifdef EN_USART1_RX //如果使能了接收
//使能接收中断
USART1->CR1|=1<<8; //PE中断使能
USART1->CR1|=1<<5; //接收缓冲区非空中断使能
MY_NVIC_Init(3,3,USART1_IRQChannel,2);//组2,最低优先级
#endif
}
int main(void)
{
u16 i;
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口1初始化
while(1)
{
for(i=0;i<1000;i++)
{
Send_Char(1);
}
}
}
|