你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
每日签到
STM32团队2
论坛吐槽优化专区
升级测试
F103求助USART3无法工作,MDK仿真能够输出,但板子不能打印
[复制链接]
luokanx
提问时间:2016-12-28 17:13 /
阅读主题, 点击返回1楼
赞
0
收藏
1
评论
18
分享
发布时间:2016-12-28 17:13
请先
登录
后回复
18个回答
luokanx
回答时间:2016-12-29 11:43:48
a0a.1 32b0c
andypanfan 发表于 2016-12-29 09:11
你这个代码 哎
重新整理了一下,在9楼,10楼有进一步的描述,麻烦帮我看一下呗。
赞
0
评论
回复
支持
反对
endsoing
回答时间:2016-12-29 12:06:25
a0a.1 32b0c
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
抢占优先级设为最高级是否合适,高低一些试试。
评分
参与人数
1
ST金币
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
any012
回答时间:2016-12-29 12:29:42
a0a.1 32b0c
确定单片机是否工作?比如用IO口先控制个LED亮灭。
晕了,我也是瞎说,既然能下载程序,那么单片机应该是正常工作的...
赞
0
评论
回复
支持
反对
luokanx
回答时间:2016-12-29 13:45:49
a0a.1 32b0c
程序没有错,是硬件连接上的问题。能用了。
赞
0
评论
回复
支持
反对
luokanx
回答时间:2016-12-29 14:48:52
a0a.1 32b0c
原来是在GPIO Config()里面没有开启总线时钟,里面加上这句就可以了。
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);
评分
参与人数
1
ST金币
+2
收起
理由
zero99
+ 2
结贴奖励
查看全部评分
赞
1
评论
回复
支持
1
反对
0
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扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
重新整理了一下,在9楼,10楼有进一步的描述,麻烦帮我看一下呗。
抢占优先级设为最高级是否合适,高低一些试试。
评分
查看全部评分
晕了,我也是瞎说,既然能下载程序,那么单片机应该是正常工作的...
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);
评分
查看全部评分
评分
查看全部评分