你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 3512|回复: 14

有關UART的問題,請高手幫忙解答

[复制链接]

4

主题

26

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2011-9-22 16:16:38 | 显示全部楼层 |阅读模式
小弟是新手,最近寫了一個UART的測試程式,把RX根TX接在一起,想傳完看接收的資料正不正確,但是只有傳沒收到,請高手幫我看看程式哪邊有BUG

int main(void)
{
 /* System Clocks Configuration */
 RCC_Configuration();
  
 /* NVIC configuration */
 NVIC_Configuration();
 
 /* Configure the GPIO ports */
 GPIO_Configuration();
 
 /* Configure the UART1 ports */
 UART_Configuration();
 
 for(i=0;i
回复

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2011-9-22 20:39:41 | 显示全部楼层

RE:有關UART的問題,請高手幫忙解答

RCC_Configuration();
这个里面开启了串口时钟了没有?
回复 支持 反对

使用道具 举报

4

主题

26

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2011-9-23 09:11:16 | 显示全部楼层

回复:有關UART的問題,請高手幫忙解答

回复第 2 楼 于2011-09-22 12:39:41发表:
RCC_Configuration();
这个里面开启了串口时钟了没有? 

void RCC_Configuration(void)
{
 ErrorStatus HSEStartUpStatus;
 /* RCC system reset(for debug purpose) */
 RCC_DeInit();
 
 /* Enable HSE */
 RCC_HSEConfig(RCC_HSE_ON);
 
 /* Wait till HSE is ready */
 HSEStartUpStatus = RCC_WaitForHSEStartUp();
 
 if(HSEStartUpStatus == SUCCESS)
 {
  /* Enable Prefetch Buffer */
  FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
 
  /* Flash 2 wait state */
  FLASH_SetLatency(FLASH_Latency_2);
 
  /* HCLK = SYSCLK */
  RCC_HCLKConfig(RCC_SYSCLK_Div1);
 
  /* PCLK2 = HCLK */
  RCC_PCLK2Config(RCC_HCLK_Div1);
 
  /* PCLK1 = HCLK/2 */
  RCC_PCLK1Config(RCC_HCLK_Div2);
 
  /* PLLCLK = 8MHz * 9 = 72 MHz */
  //RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
 
  /* Enable PLL */
  RCC_PLLCmd(ENABLE);
 
  /* Wait till PLL is ready */
  while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
  {
  }
 
  /* Select PLL as system clock source */
  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
 
  /* Wait till PLL is used as system clock source */
  while(RCC_GetSYSCLKSource() != 0x08)
  {
  }
 }
  
 /* Enable GPIOD and USART1 clocks */
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_USART1, ENABLE);
void UART_Configuration(void)
{
 USART_InitTypeDef USART_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;
 
 /* Configure USART1 */
 USART_Init(USART1, &USART_InitStructure);
 
 /* Enable the USART1 */
 USART_Cmd(USART1, ENABLE);
 
}
void GPIO_Configuration(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;
 /* Enable the USART2 Pins Software Remapping */
 //GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);
 
 /* Configure USART1 Rx (PA.10) as input floating */
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
 GPIO_Init(GPIOA, &GPIO_InitStructure);
 
 /* Configure USART2 Rx (PD.06) as input floating */
 //GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
 //GPIO_Init(GPIOD, &GPIO_InitStructure);
 
 /* Configure USART1 Tx (PA.09) as alternate function push-pull */
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
 GPIO_Init(GPIOA, &GPIO_InitStructure);
 
 /* Configure USART2 Tx (PD.05) as alternate function push-pull */
 //GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
 //GPIO_Init(GPIOD, &GPIO_InitStructure);
}
 
RCC   GPIO  UART_Configuration這些這樣寫應該沒錯吧,是要設中斷嗎??
回复 支持 反对

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2011-9-23 10:05:38 | 显示全部楼层

RE:有關UART的問題,請高手幫忙解答

用查询输出,可以不使用中断。没有开启GPIOA的时钟。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_USART1, ENABLE);
回复 支持 反对

使用道具 举报

4

主题

26

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2011-9-23 10:21:31 | 显示全部楼层

回复:有關UART的問題,請高手幫忙解答

回复第 4 楼 于2011-09-23 02:05:38发表:
用查询输出,可以不使用中断。没有开启GPIOA的时钟。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_USART1, ENABLE); 

感謝~~我把RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_USART1, ENABLE);
改成RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA| RCC_APB2Periph_USART1, ENABLE);就可以了
順便問一下,我看有些範例只下RCC_APB2Periph_USART1就可以跑TX了
那我可以把他解讀成RCC_APB2Periph_USART1---->下TX的CLOCK
                               RCC_APB2Periph_GPIOA------->下RX的CLOCK嗎
抱歉問很基礎的問題,因為沒基礎,我又是自學的,所以ㄧ些基礎的東西都不清楚
回复 支持 反对

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2011-9-23 14:41:44 | 显示全部楼层

RE:有關UART的問題,請高手幫忙解答

你可能没有看到,不开启GPIOA的时钟使不能工作的。你可以看看他的GPIO配置里面是不是有开启代码。
回复 支持 反对

使用道具 举报

4

主题

26

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2011-9-23 16:13:20 | 显示全部楼层

回复:有關UART的問題,請高手幫忙解答

回复第 6 楼 于2011-09-23 06:41:44发表:
你可能没有看到,不开启GPIOA的时钟使不能工作的。你可以看看他的GPIO配置里面是不是有开启代码。 

抱歉在請問一下,我把RX   TX原本連在一起解焊了
現在用RS232連接電腦,用超級終端機去模擬接收,我終端機的包率一樣是設9600
可是我接收A跟a收到的都是0X03   B跟b收到的都是0x04,請問是什麼問題
RCC那邊嗎??還是包率那邊??
回复 支持 反对

使用道具 举报

4

主题

26

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2011-9-26 09:39:50 | 显示全部楼层

回复:有關UART的問題,請高手幫忙解答

請問都沒人知道嗎
回复 支持 反对

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2011-9-26 14:04:18 | 显示全部楼层

RE:有關UART的問題,請高手幫忙解答

1、注意电脑的RX和TX要和STM32的交叉一下,即TX连接RX,RX连接TX
2、要把ST的RX和TX断开,不然会发不出去
回复 支持 反对

使用道具 举报

4

主题

26

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2011-9-26 14:22:32 | 显示全部楼层

回复:有關UART的問題,請高手幫忙解答

找到問題了,我的終端機的包率是9600,我的ARM是要設6400收發才會正常,應該是stm32f10x_rcc.c裡的頻率要調,我這顆是STM32F102R8的IC,請問一下要怎麼調整。
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版