本帖最后由 yahopo 于 2016-3-7 00:26 编辑
如题。程序是基于战舰V3,(STM32_cortex-M3)
串口1,串口2,都成功了。串口3不行。波特率9600
有几个疑问:
1.是否,我的线接错了。
①我看了原理图,是不是串口3也是接在9针接口,然后转USB。
②如果①成立,那么我串口2,假如使用的是CMO8,那我串口3,是不是也是用COM8接收。(我电脑端也没其它COM端口了,另外一个COM7是串口1,试过了也不行)
程序测试:我现在,程序是利用M3向PC端循环发送0xFF。串口3毫无响应。
2.通过仿真。
①我的程序没有跑飞
②引脚属性正常
各位大神,我需要改动哪里???
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我试过STM32F103ZET6的5个串口,你拿去试一下
/* C 文件 */
#include "usart3.h"
/* 串口3: RXDB11 TXDB10 */
void usart3_init(u32 baud_rate)
{
float USART_DIV;//串口波特率分频系数
u16 DIV_Mantissa;//整数
u16 DIV_Fraction;//小数
/* 时钟·引脚配置 */
RCC->APB2ENR |= 1<<3 ;//PB时钟
GPIOB->CRH &= 0xffff00ff;
GPIOB->CRH |= 0x00008900;//上拉输入 推挽输出10MHz
GPIOB->ODR |= 1<<11;
RCC->APB1ENR |= 1<<18;//串口3时钟_36MHZ
/* 波特率 */
USART_DIV = (float)36000000/16/baud_rate;//得出波特率系数:39.0625
DIV_Mantissa = USART_DIV;
DIV_Fraction = (USART_DIV - DIV_Mantissa)*16;//转16进制整数,才可以填入
USART3->BRR = (DIV_Mantissa<<4) | (DIV_Fraction);
/* 数据帧 */
USART3->CR1 &= ~(1<<12);//8位数据位
USART3->CR1 &= ~(1<<10);//关闭奇偶校验
USART3->CR2 &= ~(0x3<<12);//1个停止位
/* 全双工模式 */
USART3->CR1 |= 1<<3;//允许发送
USART3->CR1 |= 1<<2;//允许接收
USART3->CR3 &= ~(1<<3);//不使用半双工
// usart3_nvic_init();//接收缓冲区非空,触发中断
USART3->CR1 |= 1<<13;//开启串口1
}
void usart3_send_data(u8 data)
{
while(!(USART3->SR & (1<<6)));//等待发送完成
USART3->DR = data;
}
@正点原子 原子哥,求破。
一周热门 更多>