你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
F103求助USART3无法工作,MDK仿真能够输出,但板子不能打印
[复制链接]
luokanx
提问时间:2016-12-28 17:13 /
阅读主题, 点击返回1楼
赞
0
收藏
1
评论
18
分享
发布时间:2016-12-28 17:13
请先
登录
后回复
18个回答
damiaa
回答时间:2016-12-29 15:14:21
a1024a.1 32b0c
赞
0
评论
回复
支持
反对
zbber
回答时间:2016-12-29 16:13:55
a0a.1 32b0c
重新整理了一下
赞
0
评论
回复
支持
反对
andypanfan
回答时间:2016-12-30 09:05:26
a0a.1 32b0c
#ifndef __USART3_H
#define __USART3_H
#include "sys.h"
#include "delay.h"
#include "string.h"
#include <stdlib.h>
#include "time3.h"
#define TX3_buf_size 30
#define RX3_buf_size 30
extern u8 USART3_RX_CNT;
extern u8 USART3_RX_BUF[RX3_buf_size];
extern u8 USART3_TX_BUF[TX3_buf_size];
void usart3_init(u32 bound);
void usart3_Send_Data(u8 *buf,u8 len);
void clear_usart3_receive_buf(void);
#endif
#include "usart3.h"
//#if 1
//#pragma import(__use_no_semihosting)
//struct __FILE
//{
// int handle;
//};
//FILE __stdout;
//_sys_exit(int x)
//{
// x = x;
//}
//int fputc(int ch, FILE *f)
//{
// while((USART3->SR&0X40)==0);
// USART3->DR = (u8) ch;
// return ch;
//}
//#endif
u8 usart3_receive_data_flag=0;
u8 USART3_RX_CNT=0;
u8 USART3_RX_BUF[RX3_buf_size]={0};
u8 USART3_TX_BUF[TX3_buf_size]={0};
void usart3_init(u32 bound)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);
USART_DeInit(USART3);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //USART3_TX PB10
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; //USART3_RX PB11
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; //Usart3 NVIC 配置
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ; //抢占优先级3
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure);
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);
}
void USART3_IRQHandler(void) //串口1中断服务程序
{
unsigned char usart3_rece_dat=0;
if(USART_GetITStatus(USART3, USART_IT_RXNE)==SET) //接收中断
{
usart3_rece_dat=USART_ReceiveData(USART3);
if(USART3_RX_CNT<sizeof(USART3_RX_BUF)) //最多接收30个字节的数据
{
USART3_RX_BUF[USART3_RX_CNT]=usart3_rece_dat; //记录接收到的值
USART3_RX_CNT++; //接收数据增加1
} //USART_ReceiveData(USART1);
}
}
void usart3_Send_Data(u8 *buf,u8 len)
{
u8 t;
for(t=0;t<len;t++) //循环发送数据
{
while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET);
USART_SendData(USART3,buf[t]);
}
while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET);
}
void clear_usart3_receive_buf(void)
{
memset(USART3_RX_BUF,0,sizeof(USART3_RX_BUF));
USART3_RX_CNT=0;
}
这是我以前测试过的代码 你看看!!!
复制代码
评分
参与人数
1
ST金币
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
rowen800
回答时间:2016-12-30 16:57:50
a0a.1 32b0c
检测串口打印那块的配置
赞
0
评论
回复
支持
反对
1
2
/ 2 页
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
评分
查看全部评分