不知道为什么不能通信
代码如下
void UsartSet(void)
{
RCC->APB2ENR=(0x400d|RCC->APB2ENR);
/*P61 RCC_APB2ENR_USART1EN 14位 开启串口1的时钟
P62 RCC_APB2ENR_IOPBEN 2位 开启端口A的时钟
P62 RCC_APB2ENR_IOPBEN 3位 开启端口B的时钟
P62 RCC_APB2ENR_AFIOEN 0位 开启复用时钟*/
AFIO->MAPR = (0x00FFFFFF & AFIO->MAPR)|0x04000000;//关闭JTAG
GPIOA->CRH&=0xfffff00f;//P75 GPIO_CRH 配置端口PA9为复用推挽输出,端口PA10为上下拉输入模式
GPIOA->CRH|=0x000008B0;
GPIOB->CRH=0x44444443; //P75 GPIO_CRH 配置端口PB8为推挽输出
RCC->APB2RSTR|=1<<14; //P56 RCC_APB2RSTR_USARTRATR 复位USART1
RCC->APB2RSTR&=~(1<<14);
USART1->CR1|=1<<13; //P496 USART_CR1_UE 使能USART
USART1->CR1|=0<<12; //P496 USART_CR1_M 定义帧格式为1个起始位,8个数据位,n个停止位
USART1->CR2=(0xbfff&USART1->CR2);//498 USART_CR2_STOP [13:12] 置00,代表一位停止位
USART1->CR1|=0<<10;//P497 USART_CR1_PCE 禁止校验位
USART1->BRR=(0x1d4c|USART1->BRR);//P496 USART_BRR 设置波特率为9600对应468.75=0x1d4c
USART1->CR1|=1<<2;//P497 USART1_CR1_RE 接收被使能
}
void UsartRec(void)
{
GPIOB->ODR|=1<<8;
while((0x20 & USART1->SR)==0);//P494 USART_SR_RXNE 5位为1时 表示收到数据可以读出
UsartTra();
}
void UsartTra(void)
{
// while((0x80 & USART1->SR)==0);//P494 USART_SR_TXE 7位为1时 表示发送数据寄存器为空
USART1->DR=0x11;
while((0x40 & USART1->SR)==0);//P494 USART_SR_TC 6位为1时 表示发送完成
}
主函数
#include"stm32f10x_lib.h"
#include"usart.h"
#include"sys.h"
#include"stm32f10x_usart.h"
int main()
{
Stm32_Clock_Init();
UsartSet();
GPIOB->ODR&=0<<8;
delay_ms(5000);
while(1)
{
UsartRec();
}
} |