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

查看: 7558|回复: 5

UART4,UART5【悬赏问答】

[复制链接]

1

主题

19

回帖

0

蝴蝶豆

初级会员

最后登录
1970-1-1
发表于 2012-10-31 14:49:09 | 显示全部楼层 |阅读模式
谁有串口4,5的程序,我的串口不好使,麻烦大侠给解答一下
回复

使用道具 举报

1

主题

19

回帖

0

蝴蝶豆

初级会员

最后登录
1970-1-1
 楼主| 发表于 2012-10-31 14:50:32 | 显示全部楼层

回复:UART4,UART5

我的初始化代码:
#ifdef UART4_USE        //与上位机通信
    //使能时钟
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
                 //中断优先级
     NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn;
     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    //配置接收管脚PC11
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
    //配置发送管脚PC10
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
    //波特率、字长、停止位、奇偶校验位、硬件流控制、异步串口为默认(被屏蔽字设置)
    USART_InitStructure.USART_BaudRate = UART4_RATE;
    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_ITConfig(UART4, USART_IT_RXNE, ENABLE);
   
    USART_Cmd(UART4, ENABLE);
回复 支持 反对

使用道具 举报

25

主题

446

回帖

0

蝴蝶豆

中级会员

最后登录
2019-12-10
发表于 2012-11-5 14:31:16 | 显示全部楼层

回复:UART4,UART5【悬赏问答】

楼上的便是,不重复发了,说清楚你的为什么不好使?串口这玩意还比较简单哈
回复 支持 反对

使用道具 举报

18

主题

699

回帖

4

蝴蝶豆

金牌会员

最后登录
2020-12-7
发表于 2012-11-5 18:10:33 | 显示全部楼层

RE:UART4,UART5【悬赏问答】

恩,建议楼主把原因说的明白点,以便大家能尽快帮你解决
回复 支持 反对

使用道具 举报

24

主题

591

回帖

0

蝴蝶豆

中级会员

最后登录
2020-12-2
发表于 2012-11-8 20:52:58 | 显示全部楼层

RE:UART4,UART5【悬赏问答】

这个你参考下:
/*----------------------------------------------------------------------------
STM32 USART setup.
initializes the USARTx register
*----------------------------------------------------------------------------*/
__inline static void stm32_UsartSetup (void) {
                                                   
  if (__USART_USED & 0x01) {                                // USART1 used
    RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;                     // enable clock for Alternate Function
    AFIO->MAPR   &= ~(1 APB2ENR |= RCC_APB2ENR_IOPAEN;                   // enable clock for GPIOA
      GPIOA->CRH   &= ~(0xFFUL  CRH   |=  (0x0BUL  CRH   |=  (0x04UL  APB2ENR |= RCC_APB2ENR_AFIOEN;                   // enable clock for Alternate Function
      AFIO->MAPR   |= __USART1_REMAP;                       // set   USART1 remap
      RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;                   // enable clock for GPIOB
      GPIOB->CRL   &= ~(0xFFUL  CRL   |=  (0x0BUL  CRL   |=  (0x04UL  APB2ENR |= RCC_APB2ENR_USART1EN;                   // enable clock for USART1
        
    USART1->BRR  = __USART_BRR(__PCLK2, __USART1_BAUDRATE); // set baudrate
    USART1->CR1  = __USART1_DATABITS;                       // set Data bits
    USART1->CR2  = __USART1_STOPBITS;                       // set Stop bits
    USART1->CR1 |= __USART1_PARITY;                         // set Parity
    USART1->CR3  = __USART1_FLOWCTRL;                       // Set Flow Control
    USART1->CR1 |= (USART_CR1_RE | USART_CR1_TE);           // RX, TX enable
    if (__USART_INTERRUPTS & 0x01) {                        // interrupts used
      USART1->CR1 |= __USART1_CR1;
      USART1->CR2 |= __USART1_CR2;
      USART1->CR3 |= __USART1_CR3;
      NVIC->ISER[1] |= (1 CR1 |= USART_CR1_UE;                            // USART enable
  } // end USART1 used
  if (__USART_USED & 0x02) {                                // USART2 used
    RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;                     // enable clock for Alternate Function
    AFIO->MAPR   &= ~(1 APB2ENR |=  RCC_APB2ENR_IOPAEN;                  // enable clock for GPIOA
      GPIOA->CRL   &= ~(0xFFUL  CRL   |=  (0x0BUL  CRL   |=  (0x04UL  CRL   &= ~(0xFFUL  CRL   |=  (0x04UL  CRL   |=  (0x0BUL  APB2ENR |= RCC_APB2ENR_AFIOEN;                   // enable clock for Alternate Function
      AFIO->MAPR   |= __USART2_REMAP;                       // set   USART2 remap
      RCC->APB2ENR |=  RCC_APB2ENR_IOPDEN;                  // enable clock for GPIOD
      GPIOD->CRL   &= ~(0xFFUL  CRL   |=  (0x0BUL  CRL   |=  (0x04UL  CRL   &= ~(0xFFUL  CRL   |=  (0x04UL  CRL   |=  (0x0BUL  APB1ENR |= RCC_APB1ENR_USART2EN;                   // enable clock for USART2
    USART2->BRR  = __USART_BRR(__PCLK1, __USART2_BAUDRATE); // set baudrate
    USART2->CR1  = __USART2_DATABITS;                       // set Data bits
    USART2->CR2  = __USART2_STOPBITS;                       // set Stop bits
    USART2->CR1 |= __USART2_PARITY;                         // set Parity
    USART2->CR3  = __USART2_FLOWCTRL;                       // Set Flow Control
    USART2->CR1 |= (USART_CR1_RE | USART_CR1_TE);           // RX, TX enable
    if (__USART_INTERRUPTS & 0x02) {                        // interrupts used
      USART2->CR1 |= __USART2_CR1;
      USART2->CR2 |= __USART2_CR2;
      USART2->CR3 |= __USART2_CR3;
      NVIC->ISER[1] |= (1 CR1 |= USART_CR1_UE;                            // USART enable
  } // end USART2 used
  if (__USART_USED & 0x04) {                                // USART3 used
    RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;                     // enable clock for Alternate Function
    AFIO->MAPR   &= ~(3 APB2ENR |=  RCC_APB2ENR_IOPBEN;                  // enable clock for GPIOB
      GPIOB->CRH   &= ~(0xFFUL  CRH   |=  (0x0BUL  CRH   |=  (0x04UL  CRH   &= ~(0xFFUL  CRH   |=  (0x04UL  CRH   |=  (0x0BUL  APB2ENR |= RCC_APB2ENR_AFIOEN;                   // enable clock for Alternate Function
      AFIO->MAPR   |= __USART3_REMAP;                       // set   USART3 remap
      RCC->APB2ENR |=  RCC_APB2ENR_IOPCEN;                  // enable clock for GPIOC
      GPIOC->CRH   &= ~(0xFFUL  CRH   |=  (0x0BUL  CRH   |=  (0x04UL  APB2ENR |=  RCC_APB2ENR_IOPBEN;                // enable clock for GPIOB
        GPIOB->CRH   &= ~(0xFFUL  CRH   |=  (0x04UL  CRH   |=  (0x0BUL  APB2ENR |= RCC_APB2ENR_AFIOEN;                   // enable clock for Alternate Function
      AFIO->MAPR   |= __USART3_REMAP;                       // set   USART3 remap
      RCC->APB2ENR |=  RCC_APB2ENR_IOPDEN;                  // enable clock for GPIOD
      GPIOD->CRH   &= ~(0xFFUL  CRH   |=  (0x0BUL  CRH   |=  (0x04UL  CRH   &= ~(0xFFUL  CRH   |=  (0x04UL  CRH   |=  (0x0BUL  APB1ENR |= RCC_APB1ENR_USART3EN;                   // enable clock for USART3
    USART3->BRR  = __USART_BRR(__PCLK1, __USART3_BAUDRATE); // set baudrate
    USART3->CR1  = __USART3_DATABITS;                       // set Data bits
    USART3->CR2  = __USART3_STOPBITS;                       // set Stop bits
    USART3->CR1 |= __USART3_PARITY;                         // set Parity
    USART3->CR3  = __USART3_FLOWCTRL;                       // Set Flow Control
    USART3->CR1 |= (USART_CR1_RE | USART_CR1_TE);           // RX, TX enable
    if (__USART_INTERRUPTS & 0x04) {                        // interrupts used
      USART3->CR1 |= __USART3_CR1;
      USART3->CR2 |= __USART3_CR2;
      USART3->CR3 |= __USART3_CR3;
      NVIC->ISER[1] |= (1 CR1 |= USART_CR1_UE;                            // USART enable
  } // end USART3 used

} // end of stm32_UsartSetup
回复 支持 反对

使用道具 举报

8

主题

206

回帖

0

蝴蝶豆

中级会员

最后登录
2019-10-23
发表于 2012-11-11 23:42:40 | 显示全部楼层

RE:UART4,UART5【悬赏问答】

你下载有 3.5的固件库吧?

STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\USART
这个目录里 就有 串口 4 5 的例子
串口4有DMA支持,
串口5就没有了,只能查询、中断。
例程里面是串口1、2、3的,根据其定义,修改一些关键参数即可。
例如:
#define USART1_DR_Base (uint32_t)(&USART1->DR)
#define USART1_SR_Base (uint32_t)(&USART1->SR)
#define UART5_DR_Base (uint32_t)(&UART5->DR) //(uint32_t)(&USART5->DR)
#define UART5_SR_Base (uint32_t)(&UART5->SR) //(uint32_t)(&USART5->SR)

//串口5 查询发送
void Uart5_SendArray(u16 Leng)
{
u8 i;
for(i=0;i {
/* Send one byte */
USART_SendData(UART5, TxBuffer5);
/* Loop until UART5 DR register is empty */
while(USART_GetFlagStatus(UART5, USART_FLAG_TXE) == RESET)
{
}
}
}
 
不过 你想要学到东西 还是要把你的问题具体说出来 大家才好帮你解决的啊
回复 支持 反对

使用道具 举报

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版