金牌会员
- 积分
- 1547
- 金钱
- 1547
- 注册时间
- 2014-7-11
- 在线时间
- 256 小时
|
2金钱
原子哥STM32F407 寄存器版本USART6不能发送数据是咋回事
我使用STM32F407 寄存器版本USART6,不能发送数据,以下是代码部分
#define USART6_TX_GPIO_PORT GPIOC
#define USART6_TX_GPIO_PIN SYS_GPIO_PIN6
#define USART6_TX_GPIO_AF 8 /* AF1|ÄüÑ¡Ôñ */
#define USART6_TX_GPIO_CLK_ENABLE() do{ RCC->AHB1ENR |= 1 << 2; }while(0) /* PA¿úê±Öóê1Äü */
#define USART6_RX_GPIO_PORT GPIOC
#define USART6_RX_GPIO_PIN SYS_GPIO_PIN7
#define USART6_RX_GPIO_AF 8 /* AF1|ÄüÑ¡Ôñ */
#define USART6_RX_GPIO_CLK_ENABLE() do{ RCC->AHB1ENR |= 1 << 2; }while(0) /* PA¿úê±Öóê1Äü */
#define USART6_UX USART6
#define USART6_UX_IRQn USART6_IRQn
#define USART6_UX_IRQHandler USART6_IRQHandler
#define USART6_UX_CLK_ENABLE() do{ RCC->APB2ENR |= 1 << 5; }while(0) /* USART1 ê±Öóê1Äü */
void usart6_init(uint32_t sclk, uint32_t baudrate)
{
uint32_t temp;
/* IO ¼° ê±ÖóÅäÖÃ */
USART6_TX_GPIO_CLK_ENABLE(); /* ê1Äü′®¿úTX½Åê±Öó */
USART6_RX_GPIO_CLK_ENABLE(); /* ê1Äü′®¿úRX½Åê±Öó */
USART6_UX_CLK_ENABLE(); /* ê1Äü′®¿úê±Öó */
sys_gpio_set(USART6_TX_GPIO_PORT, USART6_TX_GPIO_PIN,
SYS_GPIO_MODE_AF, SYS_GPIO_OTYPE_PP, SYS_GPIO_SPEED_MID, SYS_GPIO_PUPD_PU); /* ′®¿úTX½Å Ä£ê½éèÖà */
sys_gpio_set(USART6_RX_GPIO_PORT, USART6_RX_GPIO_PIN,
SYS_GPIO_MODE_AF, SYS_GPIO_OTYPE_PP, SYS_GPIO_SPEED_MID, SYS_GPIO_PUPD_PU); /* ′®¿úRX½Å Ä£ê½éèÖà */
sys_gpio_af_set(GPIOC, USART6_TX_GPIO_PIN, USART6_TX_GPIO_AF); /* TX½Å ¸′óÃ1|ÄüÑ¡Ôñ, ±ØDëéèÖÃÕyè· */
sys_gpio_af_set(GPIOC, USART6_RX_GPIO_PIN, USART6_RX_GPIO_AF); /* RX½Å ¸′óÃ1|ÄüÑ¡Ôñ, ±ØDëéèÖÃÕyè· */
temp = (sclk * 1000000 + baudrate / 2) / baudrate; /* μÃμ½USARTDIV@OVER8 = 0, 2éóÃËÄéáÎåèë¼ÆËã */
/* 2¨ìØÂêéèÖà */
USART6_UX->BRR = temp; /* 2¨ìØÂêéèÖÃ@OVER8 = 0 */
USART6_UX->CR1 = 0; /* ÇåáãCR1¼Ä′æÆ÷ */
USART6_UX->CR1 |= 0 << 12; /* éèÖÃM = 0, Ñ¡Ôñ8λ×Ö3¤ */
USART6_UX->CR1 |= 0 << 15; /* éèÖÃOVER8 = 0, 16±¶1y2éÑù */
USART6_UX->CR1 |= 1 << 3; /* ′®¿ú·¢Ëíê1Äü */
/* ê1Äü½óêÕÖD¶Ï */
USART6_UX->CR1 |= 1 << 2; /* ′®¿ú½óêÕê1Äü */
USART6_UX->CR1 |= 1 << 5; /* ½óêÕ»o3åÇø·Ç¿ÕÖD¶Ïê1Äü */
sys_nvic_init(3, 3, USART6_UX_IRQn, 2); /* ×é2£¬×îμíóÅÏ輶 */
USART6_UX->CR1 |= 1 << 13; /* ′®¿úê1Äü */
}
void USART6_send_data(uint8_t *buf)
{
uint8_t t;
uint8_t legth;
//legth=strlen(buf);
legth=sizeof(buf)/sizeof(buf[0]);
for (t = 0; t < legth; t++) /* Ñ-»··¢Ëíêy¾Y */
{
while ((USART6->SR & 0X40) == 0); /* μè′y·¢Ëí½áêø */
USART6->DR = buf[t];
}
while ((USART6->SR & 0X40) == 0); /* μè′y·¢Ëí½áêø */
}
发送不成功,请问是咋回事,端口设置没问题
|
|