CH32V203RBT6串口打印出現(xiàn)亂碼PWM輸出功率也不對 但是同樣代碼在DEMO板子上可以正常實現(xiàn)以上功能

void USART1_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));//中斷執(zhí)行完成后繼續(xù)返回正常程序

void USART_Config(void)

{

? ?//PA9->TX PA10->RX

? ?GPIO_InitTypeDef GPIO_InitStructure={0};//定義IO口配置結(jié)構(gòu)體

? ?USART_InitTypeDef USART_InitStructure={0};//定義串口配置結(jié)構(gòu)體

? ?NVIC_InitTypeDef NVIC_InitStructure={0};//定義中斷配置結(jié)構(gòu)體

//UART4 APB1 GPIOC->APB2 TX->PC10 RX->PC11

? ?RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

? ?RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//開GPIOA的時鐘


? ?GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//設(shè)置PA2為推挽復(fù)用輸出

? ?GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//設(shè)置引腳

? ?GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//設(shè)置傳播速度

? ?GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIO


? ?GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//設(shè)置PA3為浮空輸入

? ?GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//設(shè)置引腳

? ?GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIO



? ?USART_InitStructure.USART_BaudRate=9600;//設(shè)置波特率

? ?USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//無硬件流

? ?USART_InitStructure.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;//串口模式收發(fā)

? ?USART_InitStructure.USART_Parity=USART_Parity_No;//不使用校驗位

? ?USART_InitStructure.USART_StopBits=1;//1位的停止位

? ?USART_InitStructure.USART_WordLength=USART_WordLength_8b;//字節(jié)長度

? ?USART_Init(USART1, &USART_InitStructure);//初始化USART2



? ?NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;

? ?NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

? ?NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;

? ?NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;

? ?NVIC_Init(&NVIC_InitStructure);


? ?USART_Cmd(USART1,ENABLE);//使能串口2

? ?USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//使能中斷

}

//發(fā)送單個字符

void USARTx_SendByte(USART_TypeDef* pUSARTx, uint8_t data)

{

? ? USART_SendData(pUSARTx, data);

? ? while(USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);//檢測寄存器是否有數(shù)據(jù)

}

//發(fā)送字符串

void USARTx_SendStr(USART_TypeDef* pUSARTx, char *str)

{

? ? uint8_t i = 0;

? ? do

? ? {

? ? ? ? USARTx_SendByte(pUSARTx, *(str+i));

? ? ? ?i++;

? ? }while(*(str+i) != '\0');

? ? while(USART_GetFlagStatus(pUSARTx, USART_FLAG_TC) == RESET);//檢測是否傳輸完成

}



int fputc(int ch, FILE *f)

{

? ? USART_SendData(USART1,(uint8_t) ch);? //發(fā)送數(shù)據(jù)到串口

? ? while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==RESET);

? ? return ch;

}


int fgetc(FILE *f)

{

? ? while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE)==RESET);

? ? return(int)USART_ReceiveData(USART1);

}


void USART1_IRQHandler(void)

{

? ? uint8_t ucTemp;

? ? if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //中斷產(chǎn)生

? ? {

? ? ? USART_ClearITPendingBit(USART1,USART_IT_RXNE);? ? //清除中斷標志

? ? ? ucTemp = USART_ReceiveData(USART1);? ? ? ? ? ? ? ?//接收數(shù)據(jù)

? ? ? USART_SendData(USART1, ucTemp);? ? ? ? ? ? ? ? ? ?//發(fā)送數(shù)據(jù)

? ? ?}

}

串口打印代碼如下

是時鐘晶振需要修改嗎?


您好,若使用CH32V203RBT6,首先需要注意工程文件配置需要修改,ld文件中FLASH、RAM大小配置、啟動文件、相關(guān)宏定義等,如下圖1。其次,注意工程默認HSE的大小是32MHz。若你板子上的晶振大小不是32M,注意要修改HSE的值以及系統(tǒng)時鐘的配置。后續(xù)若有問題,可通過郵箱(lzs@wch.cn)和我溝通。

image.png

圖1



只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频