stm32F407stm32串口最高波特率通信乱码 波特率是正确的

21ic官方微信-->
ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU
stm32f407与PC之间USART通信不成功,求大虾们指教啊
实习生, 积分 22, 距离下一级还需 28 积分
实习生, 积分 22, 距离下一级还需 28 积分
实习生, 积分 22, 距离下一级还需 28 积分
实习生, 积分 22, 距离下一级还需 28 积分
本帖最后由 kevin2512 于
18:29 编辑
stm32f407 discover开发板与PC之间USART通信不成功,按复位键才出个乱码,一个y字母上面两点的乱码。完全不对啊,复位键一直按住不放,就一直出乱码,松开啥都不出。求大虾们指教
下面是我写的代码,全在main.c文件中,没有用到中断什么的。
串口调试助手,波特率,COM口,等参数都设置正确。
不过,我在stm32f4xx.h和system_stm32f4xx.c中改了两个参数,一个是HSE我改成8M(板子上是8M),原来是25M。还有PLLM把25改成8,其他地方没动过。
#include &stm32f4xx.h&
#include &stdio.h&
#define PUTCHAR_PROTOTYPE int fputc(int ch,FILE *f)
void USART6_Config(void);
int main(void)
& &RCC_ClocksTypeDef& &RCC_C
& &RCC_GetClocksFreq(&RCC_Clocks);
&&USART6_Config();&&
&&printf(&\r\n this is a printf demo \r\n&);
&&printf(&\r\n welcome to use discovery board: \r\n&);
&&while (1)
&&{& && && && && && && && &
void USART6_Config(void)
& & GPIO_InitTypeDef& & GPIO_InitS
& & USART_InitTypeDef& &USART_InitS
& & /*使能USART1外设时钟(挂在APB2上)和GPIOA外设时钟(挂在AHB1上)*/
& & RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
& & RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART6, ENABLE);
& & GPIO_PinAFConfig(GPIOC,GPIO_PinSource6,GPIO_AF_USART6);&&//Tx
& & GPIO_PinAFConfig(GPIOC,GPIO_PinSource7,GPIO_AF_USART6);//Rx
& &/*初始化GPIOA*/
& & GPIO_InitStruct.GPIO_Pin=GPIO_Pin_6 | GPIO_Pin_7;
& & GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF;
& & GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
& & GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
& & GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;
& & GPIO_Init(GPIOC,&GPIO_InitStruct);
& & /*USART1初始化配置*/
& & USART_InitStruct.USART_BaudRate=115200;/*波特率为115200bps*/
& & USART_InitStruct.USART_WordLength=USART_WordLength_8b;/*发送字长为8位字长*/
& & USART_InitStruct.USART_StopBits=USART_StopBits_1;/*停止位为1*/
& & USART_InitStruct.USART_Parity=USART_Parity_No;/*无奇偶校验位*/
& & USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_N&&/*不采用硬件流*/
& & USART_InitStruct.USART_Mode=USART_Mode_Rx|USART_Mode_Tx; /*串口双工模式*/& && && && && &
& & USART_Init(USART6,&USART_InitStruct);
& & USART_Cmd(USART6,ENABLE); /*使能USART1*/
& &/*实现重定向printf函数,而重写的fputc()这个C标准库函数*/
& &int fputc(int ch,FILE *f)
& && &/*将printf内容发往串口*/
& && &USART_SendData(USART6,(uint8_t)ch);
& && &while(USART_GetFlagStatus(USART6,USART_FLAG_TC)!=SET)/*检测串口数据发送完成标志位TC的值*/
& && &{}& && && && && && && && && && && && && && && && && &&&/*TC=SET(1),表示发送发成*/
/*---------------------------------------下面是断言,不用管--------------------------------------------------------------------------------------*/
#ifdef&&USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
&&/* User can add his own implementation to report the file name and line number,
& &&&ex: printf(&Wrong parameters value: file %s on line %d\r\n&, file, line) */
&&/* Infinite loop */
&&while (1)
实习生, 积分 22, 距离下一级还需 28 积分
实习生, 积分 22, 距离下一级还需 28 积分
实习生, 积分 22, 距离下一级还需 28 积分
实习生, 积分 22, 距离下一级还需 28 积分
错误找出来了,我晕死啊,那个APB2的时钟使能,把函数搞成复位了。,调了我好几天。总是在最简单的地方出错啊。还难以发现
一直发数据看看,看波特率对不对;
实习生, 积分 22, 距离下一级还需 28 积分
实习生, 积分 22, 距离下一级还需 28 积分
实习生, 积分 22, 距离下一级还需 28 积分
实习生, 积分 22, 距离下一级还需 28 积分
一直发数据看看,看波特率对不对;
我想是不是时钟频率参数设置的不对呢, 因为库函数里给的外部晶振频率是25M,我的板子上焊接的是8M。
#define PLL_M& && &8& &//在system_stm32f4xx.c中,这里把25改成8;
#if !defined&&(HSE_VALUE)& &&&
&&#define HSE_VALUE& & ((uint32_t)8000000) /*!& Value of the External oscillator in Hz */
#endif /* HSE_VALUE */& && &在stm32f4xx.h中,这里把改成的8000000;
不知道其他地方还要修改不?
串口助手里参数都没错的,波特率我用的是main.c中设置的115200,就是出不来那两行printf;
高级工程师, 积分 7823, 距离下一级还需 177 积分
高级工程师, 积分 7823, 距离下一级还需 177 积分
高级工程师, 积分 7823, 距离下一级还需 177 积分
高级工程师, 积分 7823, 距离下一级还需 177 积分
#include &usart.h&
#ifdef __GNUC__
&&/* With GCC/RAISONANCE, small printf (option LD Linker-&Libraries-&Small printf
& &&&set to 'Yes') calls __io_putchar() */
&&#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
&&#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
/*******************************************************************************
* Function Name&&: USART_Configuration
* Description& & : Configure Open_USART
* Input& && && & : None
* Output& && && &: None
* Return& && && &: None
* Attention& & & & & & & &&&: None
*******************************************************************************/
void USART_Configuration(void)
{ & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
&&GPIO_InitTypeDef GPIO_InitS
&&USART_InitTypeDef USART_InitS
&&RCC_AHB1PeriphClockCmd(Open_USART_TX_GPIO_CLK,ENABLE);
&&RCC_AHB1PeriphClockCmd(Open_USART_RX_GPIO_CLK,ENABLE);
&&#ifdef& & & & USART1_OPEN
&&& & & & RCC_APB2PeriphClockCmd(Open_USART_CLK,ENABLE);
&&& & & & RCC_APB1PeriphClockCmd(Open_USART_CLK,ENABLE);
&&#endif& & & &
&&GPIO_PinAFConfig(Open_USART_TX_GPIO_PORT, Open_USART_TX_SOURCE, Open_USART_TX_AF);
&&GPIO_PinAFConfig(Open_USART_RX_GPIO_PORT, Open_USART_RX_SOURCE, Open_USART_RX_AF);
&&*&&Open_USART_TX -& PA9 , Open_USART_RX -PA10
&&GPIO_InitStructure.GPIO_Pin = Open_USART_TX_PIN;
&&GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
&&GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
&&GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
&&GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
&&GPIO_Init(Open_USART_TX_GPIO_PORT, &GPIO_InitStructure);
&&GPIO_InitStructure.GPIO_Pin = Open_USART_RX_PIN;
&&GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
&&GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
&&GPIO_Init(Open_USART_RX_GPIO_PORT, &GPIO_InitStructure);
& && & & & & & & &&&USARTx configured as follow:
& && && &- BaudRate = 115200 baud&&
& & & & & & & &&&- Word Length = 8 Bits
& && && &- One Stop Bit
& && && &- No parity
& && && &- Hardware flow control disabled (RTS and CTS signals)
& && && &- Receive and transmit& &
&&USART_InitStructure.USART_BaudRate = 115200;
&&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_N
&&USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
&&USART_Init(Open_USART, &USART_InitStructure);
&&/* Enable the Open_USART Transmit interrupt: this interrupt is generated when the
& &&&Open_USART transmit data register is empty */
&&USART_ITConfig(Open_USART,USART_IT_RXNE,ENABLE);
&&USART_Cmd(Open_USART, ENABLE);
void USART_NVIC_Config(void)
&&NVIC_InitTypeDef NVIC_InitS
&&/* Enable the USARTx Interrupt */
&&NVIC_InitStructure.NVIC_IRQChannel = Open_USART_IRQn;
&&NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
&&NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
&&NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
&&NVIC_Init(&NVIC_InitStructure);
/* Use no semihosting */
#pragma import(__use_no_semihosting)
struct __FILE
_sys_exit(int x)
& & & & x =
&&* &&Retargets the C library printf function to the USART.
&&* @param&&None
&&* @retval None
PUTCHAR_PROTOTYPE
&&/* Place your implementation of fputc here */
&&/* e.g. write a character to the USART */
&&USART_SendData(Open_USART, (uint8_t) ch);
&&/* Loop until the end of transmission */
&&while (USART_GetFlagStatus(Open_USART, USART_FLAG_TC) == RESET)
给你一个范例,自己研究下吧
扫描二维码,随时随地手机跟帖
技术领袖奖章
人才类勋章
时间类勋章
坚毅之洋流
发帖类勋章
荣誉元老奖章
等级类勋章
技术导师奖章
人才类勋章
时间类勋章
沉静之湖泊
发帖类勋章
突出贡献奖章
等级类勋章
您需要登录后才可以回帖串口通信中的波特率与比特率
比特率:每秒钟通过信道传输的信息量称为位传输速率,也就是每秒钟传送的二进制位数,简称比特率。比特&&&&
率表示有效数据的传输速率,用b/s 、bit/s、比特/秒,读作:比特每秒。
波特率:在信息传输通道中,携带数据信息的信号单元叫码元,每秒钟通过信道传输的码元数称为码元传输速率,简称波特率。波特率是指数据信号对载波的调制速率,它用单位时间内载波调制状态改变的次数来表示(也就是每秒调制的符号数),其单位是波特(Baud,symbol/s)。波特率是传输通道频宽的指标。
波特率与比特率的关系:
比特率=波特率*单个调制状态对应的二进制位数
例如假设数据传送速率为120符号/秒(symbol/s)(也就是波特率为120Baud),又假设每一个符号为8位(bit),则其传送的比特率为(120symbol/s)
* (8bit/symbol)=960bps.
单片机串口通信中波特率与比特率的关系:
信号在传输过程中,如果要经过数模转换,就需要调制,但是单片机的串口实际并没有调制信号.因为它处理的都是数字信号.所以串口的“单个调制状态对应的二进制位数”为1,所以波特率=比特率。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。求助STM32F407VG串口通信接收数据有误
[问题点数:20分,结帖人scofield_michea]
求助STM32F407VG串口通信接收数据有误
[问题点数:20分,结帖人scofield_michea]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2013年1月 硬件/嵌入开发大版内专家分月排行榜第一2012年10月 硬件/嵌入开发大版内专家分月排行榜第一2012年9月 硬件/嵌入开发大版内专家分月排行榜第一2012年8月 硬件/嵌入开发大版内专家分月排行榜第一2012年7月 硬件/嵌入开发大版内专家分月排行榜第一2012年6月 硬件/嵌入开发大版内专家分月排行榜第一2012年5月 硬件/嵌入开发大版内专家分月排行榜第一2012年4月 硬件/嵌入开发大版内专家分月排行榜第一2012年3月 硬件/嵌入开发大版内专家分月排行榜第一2012年2月 硬件/嵌入开发大版内专家分月排行榜第一2012年1月 硬件/嵌入开发大版内专家分月排行榜第一2011年11月 硬件/嵌入开发大版内专家分月排行榜第一2011年10月 硬件/嵌入开发大版内专家分月排行榜第一2011年9月 硬件/嵌入开发大版内专家分月排行榜第一
2014年10月 硬件/嵌入开发大版内专家分月排行榜第二2014年2月 硬件/嵌入开发大版内专家分月排行榜第二2013年10月 硬件/嵌入开发大版内专家分月排行榜第二2013年8月 硬件/嵌入开发大版内专家分月排行榜第二2013年3月 硬件/嵌入开发大版内专家分月排行榜第二2012年12月 硬件/嵌入开发大版内专家分月排行榜第二2012年11月 硬件/嵌入开发大版内专家分月排行榜第二2011年12月 硬件/嵌入开发大版内专家分月排行榜第二
2013年1月 硬件/嵌入开发大版内专家分月排行榜第一2012年10月 硬件/嵌入开发大版内专家分月排行榜第一2012年9月 硬件/嵌入开发大版内专家分月排行榜第一2012年8月 硬件/嵌入开发大版内专家分月排行榜第一2012年7月 硬件/嵌入开发大版内专家分月排行榜第一2012年6月 硬件/嵌入开发大版内专家分月排行榜第一2012年5月 硬件/嵌入开发大版内专家分月排行榜第一2012年4月 硬件/嵌入开发大版内专家分月排行榜第一2012年3月 硬件/嵌入开发大版内专家分月排行榜第一2012年2月 硬件/嵌入开发大版内专家分月排行榜第一2012年1月 硬件/嵌入开发大版内专家分月排行榜第一2011年11月 硬件/嵌入开发大版内专家分月排行榜第一2011年10月 硬件/嵌入开发大版内专家分月排行榜第一2011年9月 硬件/嵌入开发大版内专家分月排行榜第一
2014年10月 硬件/嵌入开发大版内专家分月排行榜第二2014年2月 硬件/嵌入开发大版内专家分月排行榜第二2013年10月 硬件/嵌入开发大版内专家分月排行榜第二2013年8月 硬件/嵌入开发大版内专家分月排行榜第二2013年3月 硬件/嵌入开发大版内专家分月排行榜第二2012年12月 硬件/嵌入开发大版内专家分月排行榜第二2012年11月 硬件/嵌入开发大版内专家分月排行榜第二2011年12月 硬件/嵌入开发大版内专家分月排行榜第二
匿名用户不能发表回复!|

我要回帖

更多关于 stm32 can波特率计算 的文章

 

随机推荐