के लिए पता लगाता है मुझे STM32L0
पर काम करने के लिए ऑटो-बॉड रेट डिटेक्शन नहीं मिल सकता है। मैं हार्डवेयर abstraction परत (एचएएल) का उपयोग कर रहा हूँ।ऑटो बॉड रेट एसटीएम 32 एल 0
मेरे initilization कोड है:
/* USART1 init function */
void MX_USART1_UART_Init(void)
{
huart1.Instance = USART1;
huart1.Init.BaudRate = 300;
huart1.Init.WordLength = UART_WORDLENGTH_9B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_EVEN;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
huart1.Init.OneBitSampling = UART_ONEBIT_SAMPLING_DISABLED;
huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_AUTOBAUDRATE_INIT;
huart1.AdvancedInit.AutoBaudRateEnable = UART_ADVFEATURE_AUTOBAUDRATE_ENABLE;
huart1.AdvancedInit.AutoBaudRateMode = UART_ADVFEATURE_AUTOBAUDRATE_ONSTARTBIT;
HAL_UART_Init(&huart1);
}
बाइट्स मैं UART1 से अधिक भेज रहा है:
0 1 2 3 4 5 6 7 8
000x 68 0B 0B 68 53 FD 52 FF FF .. etc.
0x68 = 0b01101000
0x0B = 0b00001011
0xFD = 0b11111101 <-- Character starting with 1, baudrate should be detected
0xFD :
start 1 1 .....
___ bit __________
¦______¦
...
क्यों baudrate नहीं पता लगाया जा रहा है? मैं कोशिश की है:
UART_ADVFEATURE_AUTOBAUDRATE_ONSTARTBIT
और UART_ADVFEATURE_AUTOBAUDRATE_ONFALLINGEDGE
तो मैं मोड सेटिंग के कालक्रम समायोजित और से चालक में सक्षम करने के लिए:
/* if required, configure auto Baud rate detection scheme */
if(HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_AUTOBAUDRATE_INIT))
{
assert_param(IS_UART_ADVFEATURE_AUTOBAUDRATE(huart->AdvancedInit.AutoBaudRateEnable));
MODIFY_REG(huart->Instance->CR2, USART_CR2_ABREN, huart->AdvancedInit.AutoBaudRateEnable);
/* set auto Baudrate detection parameters if detection is enabled */
if(huart->AdvancedInit.AutoBaudRateEnable == UART_ADVFEATURE_AUTOBAUDRATE_ENABLE)
{
assert_param(IS_UART_ADVFEATURE_AUTOBAUDRATEMODE(huart->AdvancedInit.AutoBaudRateMode));
MODIFY_REG(huart->Instance->CR2, USART_CR2_ABRMODE, huart->AdvancedInit.AutoBaudRateMode);
}
}
को
/* if required, configure auto Baud rate detection scheme */
if(HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_AUTOBAUDRATE_INIT))
{
assert_param(IS_UART_ADVFEATURE_AUTOBAUDRATE(huart-
/* set auto Baudrate detection parameters if detection is enabled */
if(huart->AdvancedInit.AutoBaudRateEnable == UART_ADVFEATURE_AUTOBAUDRATE_ENABLE)
{
assert_param(IS_UART_ADVFEATURE_AUTOBAUDRATEMODE(huart->AdvancedInit.AutoBaudRateMode));
MODIFY_REG(huart->Instance->CR2, USART_CR2_ABRMODE, huart->AdvancedInit.AutoBaudRateMode);
}
MODIFY_REG(huart->Instance->CR2, USART_CR2_ABREN, huart->AdvancedInit.AutoBaudRateEnable);
}
नहीं करता कुछ भी करो
इसके अलावा निम्नलिखित ठीक लग रहा है:।
घड़ी स्रोत आवृत्ति की उम्मीद संचार की गति (जब 16 से oversampling, बॉड दर/65535 fck के बीच है और fck/16 साथ संगत होना चाहिए जब 8 से oversampling, baudrate एफकेसी/65535 और एफकेसी/8 के बीच है)।
मैं 16 से oversampling रही है, इसलिए
fCK= 16000000
fCK > 16000000/65535 = 244 = 244 Hz
fCK < 16000000/16 = 1000000 = 1 MHz
मेरे पसंद के baudrate रहे हैं: 19200/ 9600 /2400 /300
"मुझे खेद है; मैं ऐसा नहीं कर सकता, फ्लाइंग स्विसमैन।" –