用usart2默认的io口试试,先不要用重映射的
试了,不行 include 发表于 2019-2-20 17:29
并不是,偶校验是项目需要,去掉也无法工作
那应该检查一下USART2的通讯对象的硬件连接情况 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 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 */ wenyangzeng 发表于 2019-2-20 19:11
那应该检查一下USART2的通讯对象的硬件连接情况
硬件确认了,是联通的 你是使用標準庫嗎 ? 是的話 應該可以用這個函式 看看
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 jeffhe1 发表于 2019-2-21 09:07
你是使用標準庫嗎 ? 是的話 應該可以用這個函式 看看
void USART_SendData(USART_TypeDef* USARTx, uint16 ...
感谢你的耐心帮助,你这个程序发送的是uint16的数据?是不是还有数据处理的代码没有贴上? 沒有 , 你可以直接填一個 byte , 我都直接這樣送;P
/*****************发送一个字符 **********************/
void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch)
{
/* 发送一个字节数据到USART */
USART_SendData(pUSARTx,ch);
/* 等待发送数据寄存器为空 */
while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);
} 问题已经解决了,原因是同事在另一个地方调用了PA2、3。还遇到一个问题,STM32单片机串口如果打开校验就必须把数据位改成9位,否则发送的数据最高位是错的
页:
1
[2]