OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3220|回复: 11

在战舰例程上加入串口4不能用?

[复制链接]

69

主题

269

帖子

0

精华

高级会员

Rank: 4

积分
977
金钱
977
注册时间
2014-7-4
在线时间
237 小时
发表于 2015-3-24 11:03:43 | 显示全部楼层 |阅读模式
5金钱
在战舰例程上加入uart4不能用,在别的程序上移植就可以。配置、发送均使用自带库函数
[mw_shl_code=c,true]void UART4_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC| RCC_APB2Periph_AFIO, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//c10 tx GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;//c11 rx GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOC, &GPIO_InitStructure); USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; 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(UART4, &USART_InitStructure); USART_Cmd(UART4, ENABLE); }[/mw_shl_code]
[mw_shl_code=c,true]USART_SendData(UART4, 0x5506);[/mw_shl_code]

是不是战舰库的版本不支持串口4

实验4 串口实验.rar

1.53 MB, 下载次数: 40

最佳答案

查看完整内容[请看2#楼]

肯定可以的。 串口1~5我都用过。 给你个寄存器的参考: [mw_shl_code=c,true]//初始化IO 串口3 //pclk1CLK1时钟频率(Mhz) //bound:波特率 void uart4_init(u32 pclk1,u32 bound) { float temp; u16 mantissa; u16 fraction; temp=(float)(pclk1*1000000)/(bound*16);//得到USARTDIV mantissa=temp; //得到整数部分 fraction=(temp-mantissa)*16; //得到小数部分 mantissa<<=4; ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-3-24 11:03:44 | 显示全部楼层
肯定可以的。
串口1~5我都用过。
给你个寄存器的参考:
[mw_shl_code=c,true]//初始化IO 串口3 //pclk1CLK1时钟频率(Mhz) //bound:波特率 void uart4_init(u32 pclk1,u32 bound) { float temp; u16 mantissa; u16 fraction; temp=(float)(pclk1*1000000)/(bound*16);//得到USARTDIV mantissa=temp; //得到整数部分 fraction=(temp-mantissa)*16; //得到小数部分 mantissa<<=4; mantissa+=fraction; RCC->APB2ENR|=1<<4; //使能PORTC口时钟 RCC->APB1ENR|=1<<19; //使能串口4时钟 GPIOC->CRH&=0XFFFF00FF; //IO状态设置 GPIOC->CRH|=0X00008B00; //IO状态设置 GPIOC->ODR|=1<<11; //rx上拉 RCC->APB1RSTR|=1<<19; //复位串口4 RCC->APB1RSTR&=~(1<<19);//停止复位 //波特率设置 UART4->BRR=mantissa; // 波特率设置 UART4->CR1|=0X200C; //1位停止,无校验位. //使能接收中断 UART4->CR1|=1<<8; //PE中断使能 UART4->CR1|=1<<5; //接收缓冲区非空中断使能 MY_NVIC_Init(2,0,UART4_IRQChannel,2);//组2,抢占3,响应2, } [/mw_shl_code]

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11577
金钱
11577
注册时间
2014-4-1
在线时间
1321 小时
发表于 2015-3-24 11:32:55 | 显示全部楼层
核对一下APB2、APB1 的时钟频率。计算波特率预置数值,必须先搞清总线频率。 

或者有什么资源相互冲突了。比如,你设置的 IO 口,例程又改作别用了。
回复

使用道具 举报

69

主题

269

帖子

0

精华

高级会员

Rank: 4

积分
977
金钱
977
注册时间
2014-7-4
在线时间
237 小时
 楼主| 发表于 2015-3-24 11:58:04 | 显示全部楼层
程序已经是最简了 ,还有我是用示波器测得不发送。
回复

使用道具 举报

69

主题

269

帖子

0

精华

高级会员

Rank: 4

积分
977
金钱
977
注册时间
2014-7-4
在线时间
237 小时
 楼主| 发表于 2015-3-24 12:30:56 | 显示全部楼层
回复【2楼】xuande:
------------------------------
附件传上去了,麻烦看下吧
回复

使用道具 举报

69

主题

269

帖子

0

精华

高级会员

Rank: 4

积分
977
金钱
977
注册时间
2014-7-4
在线时间
237 小时
 楼主| 发表于 2015-3-25 08:40:31 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
试了下你提供的初始化函数,UART4可以用了。应该是库函数还是有不完善的地方,我用库函数在别人的代码上(应该也就是库版本不同)是可以的
回复

使用道具 举报

37

主题

181

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
485
金钱
485
注册时间
2015-5-5
在线时间
34 小时
发表于 2015-10-20 12:36:34 | 显示全部楼层
回复【6楼】freewayflyer:
---------------------------------
能发一份串口4的程序给我吗?
弹起华丽的乐章 撕下最后的伪装
回复

使用道具 举报

37

主题

181

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
485
金钱
485
注册时间
2015-5-5
在线时间
34 小时
发表于 2015-10-20 12:37:23 | 显示全部楼层
回复【6楼】freewayflyer:
---------------------------------
寄存器版的。。。那个串口4 的发送函数printf哪里来?
弹起华丽的乐章 撕下最后的伪装
回复

使用道具 举报

69

主题

269

帖子

0

精华

高级会员

Rank: 4

积分
977
金钱
977
注册时间
2014-7-4
在线时间
237 小时
 楼主| 发表于 2015-10-20 16:51:47 | 显示全部楼层
回复【8楼】yy叶之舞是秋的讯息:
---------------------------------
//????4,printf ????
//?·±?????·?????????????USART2_MAX_SEND_LEN×???
void u4_printf(char* fmt,...)  
{  
va_list ap;
va_start(ap,fmt);
vsprintf((char*)UART4_TX_BUF,fmt,ap);
va_end(ap);
while(DMA2_Channel5->CNDTR!=0); //????DM2?¨??3?????ê??   
UART_DMA_Enable(DMA2_Channel5,strlen((const char*)UART4_TX_BUF));  //?¨??dma·???????
}
回复

使用道具 举报

37

主题

181

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
485
金钱
485
注册时间
2015-5-5
在线时间
34 小时
发表于 2015-10-20 21:00:03 | 显示全部楼层
用串口调试助手,我写的tm32串口1发送数据,串口4接收数据,只能发送不能接收,。。马上用你提供的试一试。。。给个qq吧
弹起华丽的乐章 撕下最后的伪装
回复

使用道具 举报

37

主题

181

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
485
金钱
485
注册时间
2015-5-5
在线时间
34 小时
发表于 2015-10-20 21:05:13 | 显示全部楼层
回复【9楼】freewayflyer:
---------------------------------
我不是很明白。除了串口一发送函数直接使用。其余都是要用DMA吗?你能不能发一个寄存器版,完整的给我
弹起华丽的乐章 撕下最后的伪装
回复

使用道具 举报

37

主题

181

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
485
金钱
485
注册时间
2015-5-5
在线时间
34 小时
发表于 2015-10-20 21:05:42 | 显示全部楼层
回复【9楼】freewayflyer:
---------------------------------
我的qq邮箱是707611185@qq.com
弹起华丽的乐章 撕下最后的伪装
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-18 20:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表