include 发表于 2019-2-20 18:10:04

freeelectron 发表于 2019-2-20 17:51
用usart2默认的io口试试,先不要用重映射的

试了,不行

wenyangzeng 发表于 2019-2-20 19:11:42

include 发表于 2019-2-20 17:29
并不是,偶校验是项目需要,去掉也无法工作

那应该检查一下USART2的通讯对象的硬件连接情况

jeffhe1 发表于 2019-2-21 08:48:13

GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_1);   //Tx
GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_1);    //Rx

有確認是GPIO_AF_1 嗎?GPIO_PinSource2 , GPIO_PinSource3 有 define?
:L

include 发表于 2019-2-21 09:01:10

jeffhe1 发表于 2019-2-21 08:48
GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_1);   //Tx
GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,G ...

这个是stm32f0gpio.h里面的定义

/**
* @briefAF 0 selection
*/
#define GPIO_AF_0            ((uint8_t)0x00) /* WKUP, EVENTOUT, TIM15, SPI1, TIM17,
                                                MCO, SWDAT, SWCLK, TIM14, BOOT,
                                                USART1, CEC, IR_OUT, SPI2 */
/**
* @briefAF 1 selection
*/
#define GPIO_AF_1            ((uint8_t)0x01) /* USART2, CEC, Tim3, USART1, USART2,
                                                EVENTOUT, I2C1, I2C2, TIM15 */
/**
* @briefAF 2 selection
*/
#define GPIO_AF_2            ((uint8_t)0x02) /* TIM2, TIM1, EVENTOUT, TIM16, TIM17 */
/**
* @briefAF 3 selection
*/
#define GPIO_AF_3            ((uint8_t)0x03) /* TS, I2C1, TIM15, EVENTOUT */

include 发表于 2019-2-21 09:01:52

wenyangzeng 发表于 2019-2-20 19:11
那应该检查一下USART2的通讯对象的硬件连接情况

硬件确认了,是联通的

jeffhe1 发表于 2019-2-21 09:07:12

你是使用標準庫嗎 ? 是的話 應該可以用這個函式 看看

void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)
{
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_DATA(Data));
   
/* Transmit Data */
USARTx->TDR = (Data & (uint16_t)0x01FF);
}

我有用過 STM32F051 是可用的 , 應該都是同為 M0系列

不然你可以把代碼整包載上來看看 , 看看有哪位大神剛好有時間可以試看看
:o

include 发表于 2019-2-21 09:17:35

jeffhe1 发表于 2019-2-21 09:07
你是使用標準庫嗎 ? 是的話 應該可以用這個函式 看看

void USART_SendData(USART_TypeDef* USARTx, uint16 ...

感谢你的耐心帮助,你这个程序发送的是uint16的数据?是不是还有数据处理的代码没有贴上?

jeffhe1 发表于 2019-2-21 09:43:31

沒有 , 你可以直接填一個 byte , 我都直接這樣送;P

/*****************发送一个字符 **********************/
void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch)
{
        /* 发送一个字节数据到USART */
        USART_SendData(pUSARTx,ch);
               
        /* 等待发送数据寄存器为空 */
        while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);       
}

include 发表于 2019-2-21 17:10:16

问题已经解决了,原因是同事在另一个地方调用了PA2、3。还遇到一个问题,STM32单片机串口如果打开校验就必须把数据位改成9位,否则发送的数据最高位是错的
页: 1 [2]
查看完整版本: stm32f042f6 UART2无法使用