STM32:-Why is it required to make pins AF(Alternate function) - stm32

I want to configure SPI1 in stm32f103. Why is it required to make pins AF(Alternate function)? Cant it just be input or output? What is actually happening when the pins are AF?

Those pins can be connected to several different peripheral blocks, by setting the alternate function, you're configuring a multiplexer within the IC to connect the pin to the correct peripheral block for your purpose.

Output pins can be controlled either by the GPIO ODR registe, or a peripheral. There must be a way to say which one has the control. If you don't need all output signals of a peripheral, you can leave the corresponding pin as GPIO, and use the pin for something else.
If the pin is set as General Purpose Output, then the output voltage level is determined by the ODR register. The peripheral controller has no effect on the output.
If the pin is set as Alternate Function Output, then the peripheral determines the pin output, and the corresponding ODR register is disconnected from the pin.
If the pin is set as input, then there is no difference. The pin state is available both in the IDR register and to the peripheral controller.

In your STM32F103, Page 26 describes what would be the value of each pin after reset. Making it AF (alternate Function) tells the processor to make this pin as your desired functionality, SPI1 in your case. If you dont do it then your Pin will always behave as default Pin.

Related

Error in blinking led using GPIO_12 of ESP32

Here is my code:
#define LED_BUILTIN 12
// the setup function runs once when you press reset or power the board
void setup()
{
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
}
// the loop function runs over and over again forever
void loop()
{
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW);// turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
The above code works perfectly fine for GPIO_2 but fails for GPIO_12. I want to ask whether it is giving fault because I am using touchpad pin or there is some other error?
I have attached an LED to GPIO_12 of ESP32 and after program uploading, my led is not blinking. I have tried to connect voltmeter to GPIO_12 and it is giving 0.5 volts with minor fluctuation. I was expecting a change of voltage after each second as per HIGH/LOW conditions of my code but unfortunately, I am not getting the desired result. What could be the possible reason?
Now I have found out the solution so let's share so that others can also get benefit. The code for which I was following the reference website contained 36 pins which mean 18 pins on each side but in my version of the board there were total 30 pins on my board which mean 15 pins on each side. Now that I have got pin out reference of that board and my board also, everything is fine, aligned and makes perfect sense. Problem was that the hardware which the reference website referred to had different hardware version with 36 pins and my hardware contained 30 total pins and was a different version of ESP32.

Why is 'GPIO.setup(6, GPIO.IN)' throwing an error?

I'm trying to read the state of the input pin (BOARD pin 6, which is a ground pin) and I receive the error "ValueError: The channel sent is invalid on a Raspberry Pi".
Am I misunderstanding the definition of an input pin? My understanding was that it is simply the ground/negative pin, connecting back 'in' to the pi?
I'm trying to read the state purely for tinkering purposes, to see the value change when it's floating (not using a pull-down).
The Ground pin is connected, literally, to ground. It is impossible to read or write values to ground or power, as these are the circuit components. You have to connect to a GPIO pin (the green(ish? I'm colorblind) dots at http://pinout.xyz).
It is possible for the input of a GPIO pin to be set to HIGH or LOW, depending on the circuit you wish to use. If you expect the GPIO to be normally LOW and HIGH when your input is triggered (such as with a pushbutton switch), then you have to set the state to pulldown.
I would recommend you read some of the background on microcontrollers: https://embeddedartistry.com/blog/2018/06/04/demystifying-microcontroller-gpio-settings/

why does the gpio pin in raspberry pi get set to 1 when a set the pin mode as input?

why does the gpio pin in raspberry pi get set to 1 when the pin is set in input mode and vice-versa?enter image description here
for example, in the attached screenshot the GPIO.0 is set in input mode and its Voltage level is 1.

RC Filter at the ADC input pins of beagle bone black

I am trying to read a thermistor with the beagle bone black.
I have a voltage divider circuit that feeds a unity gain Opamp. The O/P of the opamp is connected to a simple RC Low pass filter that feeds voltage to the ADC pin.
The problem I have noticed is that the voltage sensed by the beagle bone is always 0.02V higher than the actual voltage at the opamp output.
At first I thought this was a software issue, but on further investigation I found out that the voltage at the ADC pin is actually raised by 0.02V. If I feed the ADC pin directly from the opamp, without the RC filter I do not have this issue.
Has anyone else experienced anything similar?
Thanks in advance!
The resistance in the RC filter is too high which is causing a voltage drop because of the internal impedance of the ADC pin. You can use an active low pass filter to resolve this problem:
http://en.wikipedia.org/wiki/Low-pass_filter#Active_electronic_realization

The "Special Mask Mode" in 8259A with OCW3 (PIC : Programmable Interrupt Controller)

The manual for 8259A says that
In the special Mask Mode, when a mask bit is set in OCW1, it inhibits further interrupts at that level and enables interrupt from all other levels (lower as well as higher level) that are not masked.
Thus, any interrupts may be selectively enabled by loading the mask register.
Do the operating system use this mode when the kernel sets up the PIC? If no then the lower priority interrupts would get a bit lower benefit. Like the keyboard gets more benefit than the FDD. Is the hardware interrupt mapping to the cascaded PIC in the system assigned/hard wired in the order of the importance.
Special Mask Mode or Normal Mask Mode, Which mode would get better performance or some benefit.
Suggestion on implementation of the Special Mask Mode when configuring the PIC for an x86 PC system would help me decide if i should use it or not.